0 0

webService 调用出问题5

学习webServices时出现一个问题,客户端这边,用的是axis1.4,在编写客户端调用的时候出现异常
try {
			String endpoint = "http://localhost:8080/webServiceTest/services/HelloServiceHttpPort";
			Service service = new Service();
			Call call = null;
			call = (Call) service.createCall();
			call.setOperationName(new QName(
					"", "sayHello"));
			call.setTargetEndpointAddress(new java.net.URL(endpoint));
			HelloRequestParameter helloRequest = new HelloRequestParameter();
			Hello hello = new Hello();
			hello.setName("liu");
			hello.setStr("你好");
			helloRequest.setName("ww");
			helloRequest.setHello(hello);
			try{
			HelloResponseParameter helloResponse = (HelloResponseParameter) call.invoke(new Object[] { helloRequest });
			System.out.println("return value is " + helloResponse.getStrOut());
			}catch(Exception e){
				e.printStackTrace();
			}
			
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}


异常
org.xml.sax.SAXException: Invalid element in com.webService.helloService.schema.HelloRequestParameter - arg0
	at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
	at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
	at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2938)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
	at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.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(MustUnderstandChecker.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 com.test.TestWebServices.main(TestWebServices.java:35)


但是我直接用生成的文件去调用却可以
	HelloServiceInterface hsi = new HelloServiceInterfaceLocator();
		try {
			HelloServicePortType hspt = hsi.getHelloServiceHttpPort();
			HelloRequestParameter helloRequest = new HelloRequestParameter();
			Hello hello = new Hello();
			hello.setName("liu");
			hello.setStr("你好");
			helloRequest.setName("ww");
			helloRequest.setHello(hello);
			HelloResponseParameter helloResponse = hspt.sayHello(helloRequest);
			System.out.println("return value is " + helloResponse.getStrOut());
		} catch (ServiceException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

我看了一下自动生成的HelloServiceHttpBindingStub类,其中方法
  public com.webService.helloService.schema.HelloResponseParameter sayHello(com.webService.helloService.schema.HelloRequestParameter helloParameter) throws java.rmi.RemoteException {
        if (super.cachedEndpoint == null) {
            throw new org.apache.axis.NoEndPointException();
        }
        org.apache.axis.client.Call _call = createCall();
        _call.setOperation(_operations[0]);
        _call.setUseSOAPAction(true);
        _call.setSOAPActionURI("urn:helloService:webService:com#sayHello");
        _call.setEncodingStyle(null);
        _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
        _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
        _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
        _call.setOperationName(new javax.xml.namespace.QName("", "sayHello"));

        setRequestHeaders(_call);
        setAttachments(_call);
 try {        java.lang.Object _resp = _call.invoke(new java.lang.Object[] {helloParameter});

        if (_resp instanceof java.rmi.RemoteException) {
            throw (java.rmi.RemoteException)_resp;
        }
        else {
            extractAttachments(_call);
            try {
                return (com.webService.helloService.schema.HelloResponseParameter) _resp;
            } catch (java.lang.Exception _exception) {
                return (com.webService.helloService.schema.HelloResponseParameter) org.apache.axis.utils.JavaUtils.convert(_resp, com.webService.helloService.schema.HelloResponseParameter.class);
            }
        }
  } catch (org.apache.axis.AxisFault axisFaultException) {
  throw axisFaultException;
}
    }

这和我出异常那个调用,感觉没什么区别。 求解?

问题补充:
wanghuanqiu 写道
你这是用的axis1吧,换个axis2
还有最好把你的service接口看一下


是用的axis1
public interface HelloServicePortType extends java.rmi.Remote {
    public com.webService.helloService.schema.HelloResponseParameter sayHello(com.webService.helloService.schema.HelloRequestParameter helloParameter) throws java.rmi.RemoteException;
}

问题补充:
wanghuanqiu 写道
如果你的webservice发布成功了,你在代码中把命名空间加上再试一下

不懂,怎么加?

问题补充:
wanghuanqiu 写道
如果你的webservice发布成功了,你在代码中把命名空间加上再试一下

http://lujin55.iteye.com/blog/1441890
这个地址有代码,你看一下,解压密码123456
2012年3月16日 19:22

2个答案 按时间排序 按投票排序

0 0

如果你的webservice发布成功了,你在代码中把命名空间加上再试一下

2012年3月18日 12:15
0 0

你这是用的axis1吧,换个axis2
还有最好把你的service接口看一下

2012年3月18日 11:27

相关推荐

    WebService调用的几种方式

    本文将深入探讨在Java环境中调用WebService的五种主要方式:Axis、CXF、HttpClient、MyEclipse反向生成以及XFire。 1. Axis:Apache Axis是最早且广泛使用的SOAP库,用于创建和消费Web服务。使用Axis调用WebService...

    Webservice 调用工具

    【Webservice调用工具】 Webservice调用工具是专门用于测试和交互Web服务的软件,它们使得开发者能够方便地发送请求并接收响应,以便验证Web服务的功能和性能。Web服务通常基于SOAP(Simple Object Access Protocol...

    WebService调用代码样例

    本示例主要关注的是如何使用Java进行WebService调用,这在企业级应用开发中非常常见,特别是在需要跨平台集成时。以下是关于这个主题的一些详细知识点: 1. **WebService的基本概念**: WebService是一种基于开放...

    C#webservice调用测试工具

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

    webService调用实例 Demo

    【标题】:“webService调用实例 Demo” 在IT行业中,Web Service是一种常见的应用程序接口(API)形式,它允许不同系统间的交互,无论它们是用何种编程语言或运行在何种操作系统上。本“webService调用实例 Demo”...

    超简单的webservice调用

    【标题】"超简单的webservice调用"涉及的是在Java环境下使用Hutool库进行Web Service接口调用的基础知识。Web Service是一种基于网络的、松散耦合的软件组件交互方式,它允许不同系统间的应用共享数据和服务。在这个...

    webservice接口调用实例

    7. **异常处理**:在调用过程中可能出现网络错误、服务端错误等问题,需要编写适当的异常处理代码来捕获并处理这些问题。 在实际应用中,Web Service接口调用还涉及到安全性、性能优化和版本控制等话题。例如,可以...

    SAP-WEBSERVICE调用案例

    ### SAP-WEBSERVICE调用案例 #### 一、引言 随着企业信息化建设的深入发展,SAP作为企业管理软件的佼佼者,在业务流程整合与优化方面扮演着至关重要的角色。而Web Service作为一种标准的跨平台服务交互方式,使得...

    WebService调用测试工具

    WebService调用测试工具,支持大部分wsdl调用。

    WSDl生成WebService接口及调用

    在本主题中,我们将深入探讨如何使用WSDL生成WebService接口以及编写Test调用方法进行测试。 1. WSDL基础 WSDL文件是一个XML文档,它描述了服务的位置(endpoint)、使用的消息格式(message)和服务提供的操作...

    VC++中WebService服务的调用

    在VC++中调用WebService服务是一项常见的任务,尤其在跨平台通信、系统集成或扩展应用程序功能时。WebService是一种基于Web的、松耦合的服务,它使用标准的HTTP协议进行通信,并通过XML(eXtensible Markup Language...

    webservice调用常见问题

    ### WebService调用常见问题详解 #### 一、概述 在使用Visual Studio 2008进行Web开发的过程中,开发者可能会遇到一个常见的问题:在建立了Web Service应用程序之后,尝试在ASP.NET环境中调用该服务时,往往会出现...

    REST WebService 调用工具类

    相信大家在调用rest webservice通常使用httpclient.该示例代码是使用httpconnection的形式,以POST和GET两种方式提交调用REST WebService。在项目中一直使用的工具类,分享给大家

    WebService调用技术文档

    **WebService调用技术文档** **一、WebService简介** WebService是一种基于开放标准的Web应用程序,它能够提供跨平台、跨语言的互操作性。通过使用XML(可扩展标记语言)进行数据交换,SOAP(简单对象访问协议)...

    短信验证码Webservice调用

    短信验证码Webservice调用是现代Web应用中常见的一种安全验证机制...总之,短信验证码Webservice调用是提升用户体验和系统安全的重要手段。通过合理的API设计和安全实践,我们可以构建一个高效、可靠的短信验证码系统。

    webservice调用小工具

    挺好用的webservice开发工具.直接输入webservice地址,然后输入入参,即可调用.

    MVC调用webService

    **MVC调用WebService详解** 在C#的MVC(Model-View-Controller)框架中,调用WebService是一项常见的任务,通常用于实现客户端与服务器之间的数据交互。在本例中,我们将探讨如何在MVC应用中使用JavaScript进行异步...

    webservice调用,传参代码样例

    3. 处理异常是必不可少的,因为网络通信和Web服务调用都可能抛出异常。 通过 Axis 框架,开发者可以轻松地创建和消费Web服务,实现系统的互联互通。在实际项目中,可以根据需求选择不同的Web服务框架,如JAX-WS...

    在WinForm程序中调用WebService

    在WinForm应用程序中调用WebService是一项常见的任务,它允许客户端应用程序与远程服务器上的服务进行交互,从而实现数据交换和功能扩展。以下是如何在WinForm中实现这一操作的详细步骤及涉及的相关知识点: 1. **...

Global site tag (gtag.js) - Google Analytics