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服务,碰到的问题。所以尽量详细的记下来,为自己,也为新手! 

你可能感兴趣的:(webservice)