`
llyzq
  • 浏览: 585269 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java调用c# webservice错误记录及解决 server.userexception java.lang.NullPointerException 解

 
阅读更多
转自http://blog.csdn.net/xgx1985xgx/article/details/6257368

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

view plain
import org.apache.axis.client.Call; 
import org.apache.axis.client.Service; 
import javax.xml.namespace.QName; 
import javax.xml.rpc.ServiceException; 
import java.net.MalformedURLException; 
import java.rmi.RemoteException; 
import org.w3c.dom.*; 
/**
* @author xiegx E-mail:544890379@163.com
* @version 创建时间:Mar 10, 2011 5:37:09 PM
* 类说明 测试调用webservice
*/ 
public class Test { 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        try{ 
        // 指出service所在URL      
        String endpoint = "http://localhost:2339/WebSite1/Service.asmx"; 
        // 创建一个服务(service)调用(call)      
        Service service = new Service(); 
        Call call = (Call)service.createCall();// 通过service创建call对象      
        // 设置service所在URL      
        call.setTargetEndpointAddress(new java.net.URL(endpoint)); 
        //设置要调用的方法 
        call.setOperationName( new  QName( "http://www.luculent.net/T","StartService" )); 
        //设置该方法需要的参数 
        call.addParameter( "serviceName" , org.apache.axis.encoding.XMLType.XSD_STRING, 
                javax.xml.rpc.ParameterMode.IN); 
        //设置方法返回值的类型 
        call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING); 
        call.setUseSOAPAction(true); 
        //调用该方法 
        call.setSOAPActionURI("http://www.luculent.net/StartService"); 
        String ret = (String) call.invoke(new Object[] { new String("MSSQLSERVER") }); 
 
        /*// 方法名(processService)与MyService.java方法名保持一致     
        call.setOperationName("StartService");
        call.setReturnType(org.apache.axis.Constants.XSD_STRING);
        // Object 数组封装了参数,参数为"This is Test!",调用processService(String arg)     
        String ret = (String) call.invoke(new Object[] { new String("MSSQLSERVER") });*/ 
        System.out.println(ret); 
        }catch(Exception ex){ 
            ex.printStackTrace(); 
            System.out.println(ex.toString()); 
        } 
 
    } 
 


在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,一切正常,问题解决!
分享到:
评论
1 楼 lhgyy00 2012-02-29  
我在main函数中就报了一样的错。。。悲剧啊!!

相关推荐

    java调用webservice.zip

    java调用webservicejava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava...

    Java调用C#的WebService例子

    Java调用C#的WebService是跨平台间通信的一种常见方式,尤其在企业级应用中,可能需要集成不同语言开发的服务。本示例介绍如何在Java环境中利用Xfire库来调用C#编写的WebService服务。 首先,理解WebService的核心...

    C#调用JavaWebService

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...

    webservice启动没有问题,通过自动生成的客户端报错

    faultString: java.lang.reflect.InvocationTargetException faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace: AxisFault faultCode: {...

    C#调用WebService实例和开发(wsdl).rar

    在"C#调用WebService实例和开发(wsdl).pdf"中,读者可能会找到关于这些步骤的具体实现,包括代码示例、错误处理以及最佳实践。通过深入学习和实践,开发者不仅可以了解如何调用现有的WebService,还能掌握创建...

    JAVA 调用SAP SOAP webservice.docx

    JAVA 调用 SAP SOAP webservice 详解 在本文中,我们将详细介绍如何使用 JAVA 调用 SAP SOAP webservice,包括配置 SAP 登录信息、创建 java 项目、添加 web 服务客户端、生成 JAVA 类、调用接口等步骤。 配置 SAP...

    C#调用java发布的WebService终稿.pdf

    1.C# 调用 Java 发布的 WebService 需要使用 Web 引用。 2.使用 C# 语言调用 Java 发布的 WebService 需要添加 Web 引用。 3. WebService 的 URL 需要遵循特定的格式,例如 ...

    Java访问c#开发的webservice

    ### Java访问C#开发的Webservice详解 #### 一、引言 在现代软件开发过程中,尤其是对于大型项目而言,采用分布式系统架构已经成为一种常态。分布式应用能够将复杂的业务逻辑分解并部署到不同的服务器上,从而提高...

    java 调用https webservice实例及axis包

    Apache Axis是一款开源的Web Service框架,它使得Java开发者能够方便地创建和调用Web Service。对于HTTPS的支持,Axis提供了相应的配置和工具。 调用HTTPS Web Service的步骤大致如下: 1. **添加依赖**:首先,你...

    java调用C++ webservice

    本话题主要探讨如何使用Java调用由C++实现的Web服务(Webservice)。在给出的描述中,提到了通过WSDL(Web Services Description Language)文件来实现这一目标。以下是关于这个主题的详细知识点: 1. **Web服务...

    C++2005调用C#Webservice接口返回值为List

    C++2005调用C#Webservice接口返回值为List 本文将详细介绍C++2005如何调用C#Webservice接口返回值为List。首先,需要了解C#Webservice的基本概念和C++2005如何调用Webservice接口。 一、C#Webservice的基本概念 ...

    普通java访问c# webService

    本示例介绍的是如何使用Java来访问由C#编写的WebService服务。WebService是一种基于互联网的、平台无关的通信机制,它允许不同系统间的应用程序通过网络进行交互。 首先,我们需要理解WebService的基本原理。...

    用java调用C#编写的Webservice[归纳].pdf

    【Java调用C#编写的Web Service】 在跨平台的软件开发中,有时我们需要在Java应用中调用由其他语言,比如C#编写的Web Service。这篇文档将介绍如何使用Java来调用C#编写的Web Service,主要分为以下几个步骤: 1. ...

    java 调用 odi webservice

    Java 调用 ODI webservice 实现数据同步 Java 调用 ODI webservice 是实现数据同步的一种常见方式。ODI(Oracle Data Integrator)是一种数据集成平台,提供了webservice接口,允许用户通过webservice调用ODI方案...

    java调用.net发布的webservice(asmx)

    本文将详细讲解如何使用Java调用.NET发布的Web Service(ASMX),并解决在此过程中可能出现的SOAPAction报错和“Server not identified”错误。 首先,我们需要了解ASMX。ASMX是.NET Framework早期版本中用于创建...

    c#调用Java webService的专题(一)

    本文将深入探讨如何使用C#调用Java WebService,这是实现.NET与Java平台间互操作性的一个重要方式。我们将首先理解WebService的基本概念,然后详细讲解C#中如何通过.NET Framework的SOAP客户端代理类来调用Java ...

    java调用.net的WebService[借鉴].pdf

    【Java 调用 .NET WebService 基础知识】 在软件开发中,跨平台交互是常见的需求,Java 和 .NET 平台之间的通信可以通过 WebService 实现。本篇将详细讲解如何使用 Java 调用 .NET 开发的 WebService。 1. **...

    .net调用java WebService

    ### .NET调用Java WebService的关键知识点 #### 一、背景与原理介绍 在实际的软件开发过程中,不同技术栈之间的交互变得越来越普遍。对于.NET应用程序来说,有时需要调用由Java开发的WebService。这种跨平台的服务...

    delphi调用C#webservice.rar

    对于“传参解决工程”这个文件,可能是具体解决Delphi调用Web服务时参数传递的问题,如类型不匹配、序列化/反序列化错误等。在实际应用中,遇到这类问题时,可以参考这个文件的内容进行调试和修复。

    C#webservice调用测试工具

    【标题】:“C# WebService调用测试工具” 在IT领域,Web Service是一种基于网络的、松散耦合的软件组件,它允许不同系统之间的数据交换。C# WebService调用测试工具是专为开发者设计的,用于测试和调试Web Service...

Global site tag (gtag.js) - Google Analytics