@Bean public DefaultClassMapper classMapper() { DefaultClassMapper classMapper = new DefaultClassMapper(); Map<String, Class<?>> idClassMapping = new HashMap<>(); idClassMapping.put("foo", Foo.class); idClassMapping.put("bar", Bar.class); classMapper.setIdClassMapping(idClassMapping); return classMapper; }
@Override public void fromClass(Class<?> clazz, MessageProperties properties) { properties.getHeaders().put(getClassIdFieldName(), fromClass(clazz)); }
@Override public Class<?> toClass(MessageProperties properties) { Map<String, Object> headers = properties.getHeaders(); Object classIdFieldNameValue = headers.get(getClassIdFieldName()); String classId = null; if (classIdFieldNameValue != null) { classId = classIdFieldNameValue.toString(); } if (classId == null) { if (this.defaultType != null) { return this.defaultType; } else { throw new MessageConversionException( "failed to convert Message content. Could not resolve " + getClassIdFieldName() + " in header " + "and no defaultType provided"); } } return toClass(classId); }
@Test public void shouldUseClassMapperWhenProvidedOutbound() { DefaultClassMapper classMapper = new DefaultClassMapper(); classMapper.setTrustedPackages(TRUSTED_PACKAGE); converter.setClassMapper(classMapper); Message message = converter.toMessage(trade, new MessageProperties()); SimpleTrade marshalledTrade = (SimpleTrade) converter.fromMessage(message); assertThat(trade).isEqualTo(marshalledTrade); }
@Test public void shouldUseSpecialNameForClassIfPresent() throws Exception { classMapper.setIdClassMapping(map("daytrade", SimpleTrade.class)); classMapper.afterPropertiesSet(); classMapper.fromClass(SimpleTrade.class, props); String className = (String) props.getHeaders().get( classMapper.getClassIdFieldName()); assertThat(className, equalTo("daytrade")); }
@Test public void testDefaultType() { byte[] bytes = "<root><name>foo</name></root>".getBytes(); MessageProperties messageProperties = new MessageProperties(); messageProperties.setContentType("application/xml"); Message message = new Message(bytes, messageProperties); Jackson2XmlMessageConverter converter = new Jackson2XmlMessageConverter(); DefaultClassMapper classMapper = new DefaultClassMapper(); classMapper.setDefaultType(Foo.class); converter.setClassMapper(classMapper); Object foo = converter.fromMessage(message); assertThat(foo).isInstanceOf(Foo.class); }
@Test public void shouldUseTheCLassProvidedByTheLookupMapIfPresent() { props.getHeaders().put("__TypeId__", "trade"); classMapper.setIdClassMapping(map("trade", SimpleTrade.class)); @SuppressWarnings("rawtypes") Class clazz = classMapper.toClass(props); assertEquals(clazz, SimpleTrade.class); }
public XStreamConverter() { this.classMapper = new DefaultClassMapper(); Map nstjsons = new HashMap(); this.outputFactory = new MappedXMLOutputFactory(nstjsons); this.inputFactory = new MappedXMLInputFactory(nstjsons); this.objectMapper = new XStream(); }
public void apply() { final Map<String, Class<?>> classMappings = new HashMap<>(); classRegistrations.forEach((k, v) -> { classMappings.put(k, v.getMessageClass()); }); super.setIdClassMapping(classMappings); }
@SuppressWarnings("unchecked") @Test public void shouldUseDefaultType() { props.getHeaders().clear(); classMapper.setDefaultType(Foo.class); Class<Foo> clazz = (Class<Foo>) classMapper.toClass(props); assertSame(Foo.class, clazz); classMapper.setDefaultType(LinkedHashMap.class); }
@Test public void shouldReturnLinkedHashMapForFieldWithHashtable() { props.getHeaders().put("__TypeId__", "Hashtable"); Class<?> clazz = classMapper.toClass(props); assertThat(clazz, equalTo(LinkedHashMap.class)); }
@Test public void shouldUseClassMapperWhenProvided() { Message message = converter.toMessage(trade, new MessageProperties()); converter.setClassMapper(new DefaultClassMapper()); ((DefaultClassMapper) this.converter.getClassMapper()).setTrustedPackages(TRUSTED_PACKAGE); SimpleTrade marshalledTrade = (SimpleTrade) converter.fromMessage(message); assertThat(trade).isEqualTo(marshalledTrade); }
@Test public void testDefaultType() { byte[] bytes = "{\"name\" : \"foo\" }".getBytes(); MessageProperties messageProperties = new MessageProperties(); messageProperties.setContentType("application/json"); Message message = new Message(bytes, messageProperties); Jackson2JsonMessageConverter converter = new Jackson2JsonMessageConverter(); DefaultClassMapper classMapper = new DefaultClassMapper(); classMapper.setDefaultType(Foo.class); converter.setClassMapper(classMapper); Object foo = converter.fromMessage(message); assertTrue(foo instanceof Foo); }
public XStreamConverter() { this.classMapper = new DefaultClassMapper(); Map nstjsons = new HashMap(); this.outputFactory = new MappedXMLOutputFactory(nstjsons); this.inputFactory = new MappedXMLInputFactory(nstjsons); this.objectMapper = new XStream(); }
public void apply() { final Map<String, Class<?>> classMappings = new HashMap<>(); classRegistrations.forEach((k, v) -> { classMappings.put(k, v.getMessageClass()); }); super.setIdClassMapping(classMappings); }
private ClassMapper createClassMapper() { final Map<String, Class<?>> classMappings = new HashMap<>(); descriptions.forEach((k, v) -> classMappings.put(v.getType(), v.getMessageClass())); final DefaultClassMapper classMapper = new DefaultClassMapper(); classMapper.setIdClassMapping(classMappings); return classMapper; }
@Test public void shouldUseClassMapperWhenProvidedOutbound() { DefaultClassMapper classMapper = new DefaultClassMapper(); classMapper.setTrustedPackages(TRUSTED_PACKAGE); converter.setClassMapper(classMapper); Message message = converter.toMessage(trade, new MessageProperties()); SimpleTrade marshalledTrade = (SimpleTrade) converter.fromMessage(message); assertEquals(trade, marshalledTrade); }
@Test public void shouldThrowAnExceptionWhenClassIdNotPresent() { try { classMapper.toClass(props); } catch (MessageConversionException e) { String classIdFieldName = classMapper.getClassIdFieldName(); assertThat(e.getMessage(), containsString("Could not resolve " + classIdFieldName + " in header")); } }
@Test public void shouldConvertAnyMapToUseHashtables() { classMapper.fromClass(LinkedHashMap.class, props); String className = (String) props.getHeaders().get( classMapper.getClassIdFieldName()); assertThat(className, equalTo("Hashtable")); }
private ClassMapper createClassMapper() { final Map<String, Class<?>> classMappings = new HashMap<>(); descriptions.forEach((k, v) -> classMappings.put(v.getType(), v.getMessageClass())); final DefaultClassMapper classMapper = new DefaultClassMapper(); classMapper.setIdClassMapping(classMappings); return classMapper; }