Bootstrap

java调用c# webservice错误记录及解决 server.userexception java.lang.NullPointerException 解决axis与weblogic8的冲突

最近在弄一个java调用c#所写的webservice的程序(我使用的是axis1.4),在测试中用c#写了一个很简单的webservice,然后在myeclipse中采用以下代码调用

在java中调用c#中StartService的方法,在myeclipse中一切正常,得到了正确的返回结果

然后将上述程序放到jsp文件中,部署到weblogic8.1中运行,结果报以下错误

 

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode:
 faultString: java.lang.NullPointerException
 faultActor:
 faultNode:
 faultDetail:
        {http://xml.apache.org/axis/}stackTrace:java.lang.NullPointerException
        at org.apache.axis.message.MessageElement.addTextNode(MessageElement.jav
a:1396)
        at org.apache.axis.message.SOAPHandler.addTextNode(SOAPHandler.java:148)

        at org.apache.axis.message.SOAPHandler.endElement(SOAPHandler.java:112)
        at org.apache.axis.encoding.DeserializationContext.endElement(Deserializ
ationContext.java:1087)
        at weblogic.apache.xerces.parsers.AbstractSAXParser.endElement(AbstractS
AXParser.java:585)
        at weblogic.apache.xerces.impl.XMLNamespaceBinder.handleEndElement(XMLNa
mespaceBinder.java:898)
        at weblogic.apache.xerces.impl.XMLNamespaceBinder.endElement(XMLNamespac
eBinder.java:644)
        at weblogic.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndEle
ment(XMLDocumentFragmentScannerImpl.java:1008)
        at weblogic.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentCo
ntentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1469)
        at weblogic.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocume
nt(XMLDocumentFragmentScannerImpl.java:329)
        at weblogic.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguratio
n.java:525)
        at weblogic.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguratio
n.java:581)
        at weblogic.apache.xerces.parsers.XMLParser.parse(XMLParser.java:152)
        at weblogic.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXPar
ser.java:1175)
        at weblogic.xml.jaxp.WebLogicXMLReader.parse(WebLogicXMLReader.java:135)

        at weblogic.xml.jaxp.RegistryXMLReader.parse(RegistryXMLReader.java:138)

        at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
        at org.apache.axis.encoding.DeserializationContext.parse(Deserialization
Context.java:227)
        at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
        at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
        at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnders
tandChecker.java:62)
        at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
        at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
        at org.apache.axis.client.Call.invoke(Call.java:2767)
        at org.apache.axis.client.Call.invoke(Call.java:2443)
        at org.apache.axis.client.Call.invoke(Call.java:2366)
        at org.apache.axis.client.Call.invoke(Call.java:1812)
        at jsp_servlet.__webservice.stest(__webservice.java:73)
        at jsp_servlet.__webservice._jspService(__webservice.java:188)
        at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
        at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
(ServletStubImpl.java:971)
        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:402)
        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:446)
        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:305)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:6350)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:317)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
118)
        at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:3635)
        at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:2585)
        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)

        {http://xml.apache.org/axis/}hostname:PC-201004012019

java.lang.NullPointerException
        at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
        at org.apache.axis.client.AxisClient.invoke(AxisClient.java:216)
        at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
        at org.apache.axis.client.Call.invoke(Call.java:2767)
        at org.apache.axis.client.Call.invoke(Call.java:2443)
        at org.apache.axis.client.Call.invoke(Call.java:2366)
        at org.apache.axis.client.Call.invoke(Call.java:1812)
        at jsp_servlet.__webservice.stest(__webservice.java:73)
        at jsp_servlet.__webservice._jspService(__webservice.java:188)
        at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
        at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
(ServletStubImpl.java:971)

 

 

上述问题的原因是axis1.4和weblogic8.1有冲突,weblogic 本身携带的webservice.jar使用的旧的javax.xml.soap.*,而不是像axis使用J2EE1.4新的版本。解决方案是在应用WEB-INF/weblogic.xml(若应用中没有weblogic.xml,则可以在bea/weblogic81/samples/server/examples/build/examplesWebApp/WEB-INF中拷贝)在文件中加入如下红色配置:

    <weblogic-web-app>
 <container-descriptor>
  <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>

修改后重启weblogic,一切正常,问题解决!

;