- 浏览: 271420 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
hongxingyaru_d5b032:
但是其中“这个Accept和Request Headers中的 ...
基于Spring MVC的Web应用开发(7) - Headers -
hongxingyaru_d5b032:
学习到了,感谢分享!
基于Spring MVC的Web应用开发(7) - Headers -
bo_hai:
总结的不错。
基于Spring MVC的Web应用开发(7) - Headers -
fendou3754:
那你也说一下spring-asm重新打包以后的源码怎么获取,尽 ...
spring将spring-asm重新打包原因 -
di1984HIT:
谢谢啊~学习了~~
JMS、AMQP实例讲解
spring-integration中测试XML Transformers的一些代码:
maven:
<!-- for spring-oxm --> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.3.1</version> <optional>true</optional> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.1.7</version> <optional>true</optional> </dependency> <dependency> <groupId>org.jibx</groupId> <artifactId>jibx-run</artifactId> <version>1.1.5</version> <optional>true</optional> </dependency> <dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>2.4.0</version> <optional>true</optional> </dependency> <dependency> <groupId>org.codehaus.castor</groupId> <artifactId>castor-xml</artifactId> <version>1.3.2</version> <optional>true</optional> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- spring-xml --> <dependency> <groupId>org.apache.ws.commons.schema</groupId> <artifactId>XmlSchema</artifactId> <version>1.4.7</version> <optional>true</optional> </dependency> <dependency> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> <version>1.1.1</version> <!-- 1.1.3 version is not good. --> <optional>true</optional> </dependency>
Marshaller:
@Configuration public class XmlConfiguration { @Bean public CastorMarshaller marshaller() { CastorMarshaller marshaller = new CastorMarshaller(); return marshaller; } }
报错日志:
10:04:43,305 INFO main handler.LoggingHandler:136 - [Payload=<?xml version="1.0" encoding="UTF-8"?> <customer><address>100 State Street</address><last-name>Smith</last-name><zip>90064</zip><first-name>John</first-name><state>CA</state><city>Los Angeles</city></customer>][Headers={timestamp=1331172283294, id=ed20763b-8061-4207-88d1-688673621b81}] createUnmarshaller() Exception in thread "main" org.springframework.integration.transformer.MessageTransformationException: failed to transform message at org.springframework.integration.transformer.AbstractTransformer.transform(AbstractTransformer.java:44) at org.springframework.integration.transformer.MessageTransformingHandler.handleRequestMessage(MessageTransformingHandler.java:67) ...... Caused by: org.exolab.castor.xml.MarshalException: The class for the root element 'customer' could not be found.{File: [not available]; line: 2; column: 11} at org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalException(Unmarshaller.java:866) ...... Caused by: org.xml.sax.SAXException: The class for the root element 'customer' could not be found. at org.exolab.castor.xml.UnmarshalHandler.processFirstElement(UnmarshalHandler.java:890) ...
可以看出传输的对象已经正确转换成xml,但是将xml转回类的时候说根节点Customer对应的类没找到。
单独编写测试代码:
package com.apress.prospringintegration.transform; import java.io.ByteArrayInputStream; import java.io.InputStream; import javax.xml.transform.stream.StreamSource; import org.exolab.castor.xml.Unmarshaller; import org.xml.sax.InputSource; public class Test { public static void main(String[] args) throws Exception { StringBuilder sb = new StringBuilder(); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); sb.append("<customer>"); sb.append("<address>100 State Street</address>"); sb.append("<last-name>Smith</last-name>"); sb.append("<zip>90064</zip>"); sb.append("<first-name>John</first-name>"); sb.append("<state>CA</state>"); sb.append("<city>Los Angeles</city>"); sb.append("</customer>"); InputStream in = new ByteArrayInputStream(sb.toString().getBytes()); Unmarshaller u = new Unmarshaller(); u.setClass(Customer.class); Object o = u.unmarshal(new InputSource(in)); System.out.println(o.getClass()); } }
发现,只有设置了setClass(Clazz)才能正确解析。
spring-oxm中的org.springframework.oxm.castor.CastorMarshaller类封装了org.exolab.castor.xml.Unmarshaller。单很奇怪的是,CastorMarshaller并没有封装Unmarshaller的setClass方法。
怎么回事,bug?
翻了一遍Spring 3以来所有版本的源代码,CastorMarshaller都一样。
但Google这个关键字时,第3个结果第427到430行代码是3.0版本以后没有的!
425 private Unmarshaller createUnmarshaller() { 426 Unmarshaller unmarshaller = xmlContext.createUnmarshaller(); 427 if (targetClass != null) { 428 unmarshaller.setClass(targetClass); 429 unmarshaller.setClassLoader(targetClass.getClassLoader()); 430 } 431 customizeUnmarshaller(unmarshaller); 432 return unmarshaller; 433 }
有了这一段代码,就可以设置CastorMarshaller的targetClass来指定转换的类。
问题来了,貌似刚才说到的这个类是很早以前版本的,那就是说3.0以后官方把这个类改掉了,是优化了,提供了替代的方法,然后还没发现吗?
[2012.6.24 10:57 补充]
将pom.xml的依赖包换成:
<dependency> <groupId>org.codehaus.castor</groupId> <artifactId>castor</artifactId> <version>1.2</version> <optional>true</optional> <scope>test</scope> </dependency> <dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.9.1</version> <optional>true</optional> <scope>test</scope> </dependency>
发表评论
-
《Pro Spring Integration》读书笔记
2012-06-02 11:30 0a -
基于Spring MVC的Web应用开发(12) - Form
2012-03-31 14:50 6014本节介绍SpringMVC中的表单,demo演示访问一个表单提 ... -
基于Spring MVC的Web应用开发(11) - Views
2012-03-31 13:13 8813在FileUpload一文中,我们初步了解了SpringMVC ... -
基于Spring MVC的Web应用开发(10) - Validation
2012-03-31 11:36 3184本文介绍SpringMVC的验证(validation),在C ... -
基于Spring MVC的Web应用开发(9) - Exceptions
2012-03-31 10:55 1774本文介绍SpringMVC中的异常处理,@Controller ... -
基于Spring MVC的Web应用开发(8) - Convert
2012-03-31 09:25 3716本文介绍SpringMVC中的Convert,Convert是 ... -
基于Spring MVC的Web应用开发(7) - Headers
2012-03-30 15:01 27391本文接上一篇文章,介 ... -
基于Spring MVC的Web应用开发(6) - Response
2012-03-30 10:56 36119本文讲解Spring MVC的Response,深入了解一下@ ... -
基于Spring MVC的Web应用开发(5) - Redirect
2012-03-26 15:10 17573本文介绍Spring MVC中的重定向(Redirect),先 ... -
基于Spring MVC的Web应用开发(4) - FileUpload
2012-03-20 21:17 35792上一篇文章介绍了Spring MVC如何处理静态资源文件,本文 ... -
基于Spring MVC的Web应用开发(3) - Resources
2012-03-20 16:22 6635上一篇介绍了在基于Spring MVC的Web项目中加入日志, ... -
基于Spring MVC的Web应用开发(2) - Log
2012-03-19 11:55 3620上一篇文章我们使用SpringMVC搭建了一个简单WEB项目 ... -
基于Spring MVC的Web应用开发(1) - HelloWorld
2012-03-16 07:21 18301MVC架构 MVC是模型(model),视图(view),控 ... -
spring将spring-asm重新打包原因
2012-03-06 13:41 8294以前就发现通过eclipse上面的m2e插件不能将spring ... -
Spring底层使用SAX解析XML配置文件
2012-02-29 01:28 6156最近在研究Spring源代码,在梳理spring-beans时 ... -
在Spring 3.1.0 M2中配置Hibernate事务失效?
2011-10-22 00:38 2210SpringSource与2011年6月8号发布了Spring ...
相关推荐
赠送jar包:spring-oxm-5.3.15.jar; 赠送原API文档:spring-oxm-5.3.15-javadoc.jar; 赠送源代码:spring-oxm-5.3.15-sources.jar; 赠送Maven依赖信息文件:spring-oxm-5.3.15.pom; 包含翻译后的API文档:spring...
赠送jar包:spring-oxm-5.0.8.RELEASE.jar; 赠送原API文档:spring-oxm-5.0.8.RELEASE-javadoc.jar; 赠送源代码:spring-oxm-5.0.8.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-oxm-5.0.8.RELEASE.pom;...
在实际项目中,Spring-oxm常用于处理服务端接收到的XML请求,或者将业务对象转换为XML响应。通过配置Spring-oxm,可以实现对象的自动序列化和反序列化,减少手动处理XML的工作量。 总结,Spring-oxm通过适配器模式...
赠送jar包:spring-oxm-5.3.10.jar; 赠送原API文档:spring-oxm-5.3.10-javadoc.jar; 赠送源代码:spring-oxm-5.3.10-sources.jar; 赠送Maven依赖信息文件:spring-oxm-5.3.10.pom; 包含翻译后的API文档:spring...
在压缩包中,`spring-oxm-4.2.xsd.txt`可能是对`spring-oxm-4.2.xsd`内容的文本格式化版本,方便开发者阅读和理解。通过这个文本文件,开发者可以详细查看每个元素的说明,了解其属性、用法和限制,从而更好地利用...
赠送jar包:spring-oxm-5.3.15.jar; 赠送原API文档:spring-oxm-5.3.15-javadoc.jar; 赠送源代码:spring-oxm-5.3.15-sources.jar; 赠送Maven依赖信息文件:spring-oxm-5.3.15.pom; 包含翻译后的API文档:spring...
spring-oxm-4.0.0.RELEASE.jar
赠送jar包:spring-oxm-4.2.8.RELEASE.jar; 赠送原API文档:spring-oxm-4.2.8.RELEASE-javadoc.jar; 赠送源代码:spring-oxm-4.2.8.RELEASE-sources.jar; 包含翻译后的API文档:spring-oxm-4.2.8.RELEASE-...
赠送jar包:spring-oxm-5.0.5.RELEASE.jar; 赠送原API文档:spring-oxm-5.0.5.RELEASE-javadoc.jar; 赠送源代码:spring-oxm-5.0.5.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-oxm-5.0.5.RELEASE.pom;...
赠送jar包:spring-oxm-5.2.15.RELEASE.jar; 赠送原API文档:spring-oxm-5.2.15.RELEASE-javadoc.jar; 赠送源代码:spring-oxm-5.2.15.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-oxm-5.2.15.RELEASE....
赠送jar包:spring-oxm-5.0.8.RELEASE.jar; 赠送原API文档:spring-oxm-5.0.8.RELEASE-javadoc.jar; 赠送源代码:spring-oxm-5.0.8.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-oxm-5.0.8.RELEASE.pom;...
赠送jar包:spring-oxm-4.2.2.RELEASE.jar; 赠送原API文档:spring-oxm-4.2.2.RELEASE-javadoc.jar; 赠送源代码:spring-oxm-4.2.2.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-oxm-4.2.2.RELEASE.pom;...
spring-oxm-4.1.0.RELEASE.jar
赠送jar包:spring-oxm-5.0.5.RELEASE.jar; 赠送原API文档:spring-oxm-5.0.5.RELEASE-javadoc.jar; 赠送源代码:spring-oxm-5.0.5.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-oxm-5.0.5.RELEASE.pom;...
赠送jar包:spring-oxm-4.2.2.RELEASE.jar; 赠送原API文档:spring-oxm-4.2.2.RELEASE-javadoc.jar; 赠送源代码:spring-oxm-4.2.2.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-oxm-4.2.2.RELEASE.pom;...
赠送jar包:spring-oxm-5.2.15.RELEASE.jar; 赠送原API文档:spring-oxm-5.2.15.RELEASE-javadoc.jar; 赠送源代码:spring-oxm-5.2.15.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-oxm-5.2.15.RELEASE....
Spring oxm:Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换; spring-oxm是操作XML文件:生成,修改节点的完美第三方库
赠送jar包:spring-oxm-4.2.8.RELEASE.jar 赠送原API文档:spring-oxm-4.2.8.RELEASE-javadoc.jar 赠送源代码:spring-oxm-4.2.8.RELEASE-sources.jar 包含翻译后的API文档:spring-oxm-4.2.8.RELEASE-javadoc-...
Spring oxm:Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换; spring-oxm是操作XML文件:生成,修改节点的完美第三方库
spring-oxm-1.5.4.jar