Resin启动Webservice客户端,调用Webservice服务报property "javax.xml.stream.supportDTD" not supported错误
说明:Webservice客户端是用CXF框架的wsdl2java工具根据wsdl文件生成的,Webservice服务端其他公司使用.net开发的。
首先对生成的java客户端代码写了main方法测试,调用webservice服务正常。
然后我把生成java客户端代码加拷到我现有的Web工程中,然后通过http的方式去调用该客户端代码去调用Webservice服务,结果报错。完整的报错信息如下:
java.io.FileNotFoundException: /500.jsp org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.ExceptionInInitializerError at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:823) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) at javax.servlet.http.HttpServlet.service(HttpServlet.java:114) at javax.servlet.http.HttpServlet.service(HttpServlet.java:91) at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:103) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87) at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:187) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:265) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:273) at com.caucho.server.port.TcpConnection.run(TcpConnection.java:682) at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:743) at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:662) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.ExceptionInInitializerError at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.createReader(RuntimeWSDLParser.java:794) at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.resolveWSDL(RuntimeWSDLParser.java:251) at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:118) at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:254) at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:217) at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:165) at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:93) at javax.xml.ws.Service.<init>(Service.java:56) at ws.zjs.order.cn.com.zjs.edi.Query.<init>(Query.java:51) at ws.zjs.order.cn.com.zjs.edi.QuerySoap_QuerySoap_Client.<clinit>(QuerySoap_QuerySoap_Client.java:30) at com.specl.api.controller.webservicezjs.ZJSWebserviceConctroller.getOrderInfos(ZJSWebserviceConctroller.java:61) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:421) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:409) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:774) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) at javax.servlet.http.HttpServlet.service(HttpServlet.java:114) at javax.servlet.http.HttpServlet.service(HttpServlet.java:91) at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:103) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87) at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:187) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:265) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:273) at com.caucho.server.port.TcpConnection.run(TcpConnection.java:682) at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:743) at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:662) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.IllegalArgumentException: property "javax.xml.stream.supportDTD" not supported at com.caucho.xml.stream.XMLInputFactoryImpl.setProperty(XMLInputFactoryImpl.java:265) at com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory.getXMLInputFactory(XMLStreamReaderFactory.java:101) at com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory.<clinit>(XMLStreamReaderFactory.java:67) 我在这个Web项目中也写了个main方法通过客户端代码去调用webservice服务去测试,也就一点问题都没有。奇怪了,通过main方法 去访问没有问题,通过Web方式去访问就有问题! 因为以前没有做过Webservice开发,刚开始以为是CXF框架生成代码的问题,然后一直在网上找有关 CXF生成客户端的问题。都没有找到结果。 为了定位问题,我有新建了一个新的Web项目,把生成的java客户端代码也拷到我的新Web项目中。启动的是Tomcat服务器, 然后还是一样通过http请求调用该java客户端去调用Webservice服务。结果调用成功!更奇快了,为什么在这个Web项目中可以调用 Webservice服务成功?我感觉是不是我之前那个Web项目中的jar包有冲突。然后我就把我之前那个Web项目中jar都加到这个新Web项目 中的classpath中去,结果用Tomcat启动,通过http方式访问,发现还是没有问题! 而在回到我之前那个Web项目中去(说明:由于项目需要,开了两个Web服务器,一个是resin服务器,而这个Web项目就是跑在Resin上;另个一 是Tomcat服务器,跑了其他的项目),再次启动Resin服务器。问题依旧,仍然报同样的错误! 把上面的错误信息贴到网上去搜,但是仍然没有找到解决方案!正在一筹莫展的时候,我把最下面的错误信息“ java.lang.IllegalArgumentException: property "javax.xml.stream.supportDTD" not supported ” 贴到网上去,无意中找到了一个信息:
resin web service 报异常信息 property "javax.xml.stream.isCoalescing" not supported
跟我的错误有点像,点进去一看,说是使用axis2开发webservice,部署到tomcat上没有问题,部署到resin上报下边异常。 我想了想,我那个报错Web工程,不就是部署在Resin上嘛。然后我改成部署到Tomcat上去,结果运行,也没有问题!心里兴奋了一下,貌似问题找到了,应该就是Resin服务器引起来的了!
然后我按照那里面的方法,
首先在resin.conf配置中找到如下代码:
<!-- Uncomment to use Resin's XML implementations
-
- <system-property javax.xml.parsers.DocumentBuilderFactory
- ="com.caucho.xml.parsers.XmlDocumentBuilderFactory"/>
- <system-property javax.xml.parsers.SAXParserFactory
- ="com.caucho.xml.parsers.XmlSAXParserFactory"/>
-->
如果已经使用,就替换下面,如果没有使用,就加上下面的配置
<system-property javax.xml.stream.XMLInputFactory="com.sun.xml.internal.stream.XMLInputFactoryImpl" />
我发现我的 resin.conf配置中没有 <system-property javax.xml.stream.XMLInputFactory="com.sun.xml.internal.stream.XMLInputFactoryImpl" /> 配置项。加上后,重启Resin,然后再以Web方式访问,结果大功告成!证明了是Resin服务器引起来的! 这是我第一次通过Webservice客户端调用远程Webservice服务,碰到的问题。所以尽量详细的记下来,为自己,也为新手!