给WebService注入其他类的时候,报空指针错误。
web.xml配置如下:
- <servlet>
- <servlet-name>XFireServlet</servlet-name>
- <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
- <load-on-startup>0</load-on-startup>
- </servlet>
结果当webservice调用webservice服务时,报错:
- org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Fault: java.lang.NullPointerException
- org.codehaus.xfire.fault.XFireFault: Fault: java.lang.NullPointerException
- at org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(Soap11FaultSerializer.java:31)
- at org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(SoapFaultSerializer.java:28)
- at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:111)
- at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67)
- at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
- at org.codehaus.xfire.client.Client.onReceive(Client.java:406)
- at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:139)
- at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)
- at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
- at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
- at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)
- at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)
- at org.codehaus.xfire.client.Client.invoke(Client.java:336)
- at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77)
- at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)
- at $Proxy0.btsPower(Unknown Source)
- at com.boco.veh.ws.test.WSTest.main(WSTest.java:36)
这个问题可以通过如下配置解决。
- <servlet>
- <servlet-name>XFireServlet</servlet-name>
- <!-- 不整合时使用org.codehaus.xfire.transport.http.XFireConfigurableServlet -->
- <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
- <load-on-startup>0</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>XFireServlet</servlet-name>
- <url-pattern>/servlet/XFireServlet/*</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>XFireServlet</servlet-name>
- <url-pattern>/services/*</url-pattern>
- </servlet-mapping>
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderListener
- </listener-class>
- </listener>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:org/codehaus/xfire/spring/xfire.xml,/WEB-INF/applicationContext.xml</param-value>
- </context-param>
xfire不整合spring时,使用
org.codehaus.xfire.transport.http.XFireConfigurableServlet
xfire整合spring时,使用
org.codehaus.xfire.spring.XFireSpringServlet