axis2调用一般类型的方法是正确的,但是在调用复杂类型的时候总是报错,不知道是为什么,现在把代码粘贴如下,希望高手帮忙解决一下啊!
------------------------------------------------------------------------
服务端代码:
package com.hanweb.service;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.hanweb.entity.Customer;
import com.hanweb.entity.Project;
public class WebServiceTest {
public String getTestResult(String username){
return username + " :getTestResult 成功";
}
public Customer getCustomerInfo(){
Customer cus = new Customer();
cus.setCid("11111111");
cus.setCname("开心人生");
cus.setAddress("南京市天极");
cus.setCompany("南京天极有限公司");
return cus;
}
public Project getSimpleProject(Customer cus){
Project pt = new Project();
cus = new Customer();
cus.setCid("1");
cus.setCname("11111");
cus.setAddress("222222222222");
cus.setCompany("333333333");
pt.setCus(cus);
pt.setPdate(new SimpleDateFormat("yyyy-mm-dd").format(new Date(System.currentTimeMillis())));
pt.setPname("0000000");
return pt;
}
}
------------------------------------------------------------------------------
实体类:
package com.hanweb.entity;
import java.io.Serializable;
public class Customer implements Serializable{
private static final long serialVersionUID = 1L;
private String cid;
private String cname;
private String company;
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
private String address;
}
-------------------------------------
package com.hanweb.entity;
import java.io.Serializable;
public class Project implements Serializable{
private static final long serialVersionUID = 1L;
private String pname;
private String pdate;
private Customer cus;
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPdate() {
return pdate;
}
public void setPdate(String pdate) {
this.pdate = pdate;
}
public Customer getCus() {
return cus;
}
public void setCus(Customer cus) {
this.cus = cus;
}
}
---------------------------------------------------------------------------------------------
客户端代码:
package com.hanweb.client;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
import com.hanweb.entity.Customer;
public class WebServiceClient {
private static final String SIMPLE_SERVICE_ENDPOINT = "http://localhost:8088/webservice2.1/services/webServiceTest?wsdl";
public static void main(String[] args){
WebServiceClient client = new WebServiceClient();
client.getTestResultAxis();
client.getTestResultAxis2();
client.getTestObjectResultAxis2();
}
public void getTestResultAxis(){
try{
Service service = new Service();
Call call = (Call)service.createCall();
//创建访问路径
URL url = new URL(SIMPLE_SERVICE_ENDPOINT);
call.setTargetEndpointAddress(url);
//方法体调用
QName qname = new QName("http://webservice.hanweb.com","getTestResult");
call.setOperationName(qname);
//传参
call.addParameter("username",org.apache.axis.Constants.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
try{
//参数传值
String returnValue = (String)call.invoke(new Object[]{"axis 调用一般类型方法"});
System.out.println(returnValue);
}catch(IOException e){
e.printStackTrace();
}
}catch(MalformedURLException e){
e.printStackTrace();
}catch(ServiceException e){
e.printStackTrace();
}
}
public void getTestResultAxis2(){
try {
RPCServiceClient client = new RPCServiceClient();
Options option = client.getOptions();
EndpointReference EPR = new EndpointReference(SIMPLE_SERVICE_ENDPOINT);
option.setTo(EPR);
Class[] objClass = new Class[]{String.class};
QName qname = new QName("http://ws.apache.org/axis2","getTestResult");
System.out.println(client.invokeBlocking(qname, new Object[]{"axis2 调用一般类型方法"}, objClass)[0]);
} catch (AxisFault e1) {
e1.printStackTrace();
}
}
public void getTestObjectResultAxis2(){
try{
//调用复杂类型 getCustomerInfo 方法
RPCServiceClient serviceClient = new RPCServiceClient();
Options option = serviceClient.getOptions();
EndpointReference address = new EndpointReference(SIMPLE_SERVICE_ENDPOINT);
option.setTo(address);
QName qname = new QName("http://ws.apache.org/axis2","getCustomerInfo");
Customer customer = (Customer)serviceClient.invokeBlocking(qname, new Object[]{}, new Class[]{Customer.class})[0];
System.out.println("Customer: " + customer.getCid() + " - " + customer.getCompany());
} catch (AxisFault e) {
e.printStackTrace();
}
}
}
------------------------------------------------------------------------
报错:
getTestObjectResultAxis2在调用的时候报错!
org.apache.axis2.AxisFault: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Premature end of file.
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:90)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:548)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:528)
at org.apache.axis2.rpc.client.RPCServiceClient.invokeBlocking(RPCServiceClient.java:102)
at com.hanweb.client.WebServiceClient.getTestObjectResultAxis2(WebServiceClient.java:94)
at com.hanweb.client.WebServiceClient.main(WebServiceClient.java:28)
Caused by: org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Premature end of file.
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:249)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:156)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:105)
at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:53)
at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:164)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:112)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:88)
... 9 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Premature end of file.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:506)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:161)
... 15 more
希望大侠帮忙啊,急需啊
分享到:
相关推荐
在Java开发中,Web服务是实现跨...这个过程对于理解Web服务的工作原理和Java的WebService客户端开发非常有帮助。在实际开发中,根据具体需求,你可能需要对生成的代码进行一定的定制和扩展,以满足更复杂的应用场景。
这个实例可能包括创建服务代理、配置连接、调用方法和处理结果的代码段,帮助初学者理解并实践C#调用WebService的过程。通过分析和运行这些代码,你可以更深入地了解WebService的工作原理以及在C#中如何有效地利用...
带详细解决方案说明文档,提供三种解决方式,另外包含stax2-api.jar,stax2-api-source.jar,woodstox-core-asl-4.4.1.jar,stax-ex.jar,wstx-asl-3.2.9.jar等jar文件,亲测有效。
在C#中,动态调用意味着在运行时创建对象并执行方法,而不是在编译时。这对于处理未知或不固定的Web服务接口特别有用。下面是一步步的实现过程: 1. **导入Web服务引用**:通常,我们会使用`Add Service Reference`...
3. **客户端调用**:客户端可以通过JAX-WS的`Service`类,根据WSDL文件生成服务代理,调用服务接口方法。 二、CXF框架实现WebService服务端 1. **Apache CXF简介**:CXF是一个开源的Web服务框架,它支持多种Web...
该包中含有: 1.axis1.4-bin.zip 2.wsdl2java.bat批处理脚本 3.客户端调用时缺失的mail.jar和activation.jar,没有这两个包执行客户端代码可能会报错。
本文将详细讲解如何使用Java调用.NET发布的Web Service(ASMX),并解决在此过程中可能出现的SOAPAction报错和“Server not identified”错误。 首先,我们需要了解ASMX。ASMX是.NET Framework早期版本中用于创建...
在使用Delphi 7开发应用程序时,有时会遇到一个常见的问题,即在尝试调用Web Service时,程序因为Windows的数据执行保护(Data Execution Prevention, DEP)机制而失败。DEP是Windows操作系统为了提高系统安全性而...
腾讯地图WebService地址解析接口是一种基于Web服务的技术,用于将地理坐标(经纬度)转换为具体的行政区域地址。这种接口在处理地理位置数据时非常有用,尤其是在分析用户行为、位置跟踪或提供定位服务的场景中。...
然而,当使用AXIS2 Eclipse插件打包发布时,可能会遇到客户端报错"Weather didn't initialize"。这通常是由于服务端和客户端之间数据序列化和反序列化的不匹配导致的。AXIS2在处理POJO时会自动进行对象的序列化和反...
总结来说,开发Web Service接口涉及到服务端和客户端的创建,主要工作包括定义接口、实现服务、生成服务端代码、测试服务可用性以及创建客户端代码并进行调用测试。Eclipse作为强大的集成开发环境,提供了方便的工具...
Web服务创建完成后,我们可以开始编写客户端代码来调用这些服务。IDEA的Web服务插件提供了一种便捷的方式,通过"New" -> "Other" -> "Web Service Client",导入刚刚创建的服务的WSDL地址,IDEA会自动生成客户端所需...
在使用JQuery发起HttpGet请求调用WebService并返回JSON格式数据时遇到“parserror”错误,这通常与客户端和服务端对数据格式的处理和预期不一致有关。为了解决这个问题,我们可以通过几个步骤进行排查和修正: 首先...
Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同的应用程序之间进行通信...通过实践这个简单的WebService案例,你将能够更好地理解WebService的核心概念,并为后续的复杂项目打下坚实的基础。
总的来说,Python调用WebService接口涉及的主要步骤包括:安装必要的库,获取WSDL文件,创建客户端,理解和调用接口方法,以及处理可能出现的问题。在实际开发中,理解这些概念和技巧是至关重要的,能够帮助我们更...
在这个Demo中,客户端开发者将使用WSDL文件来获取服务的元数据,从而创建对应的客户端代理对象,进而调用服务端的方法。 在CXF中,动态客户端是一个强大的特性,它允许你在运行时根据WSDL动态生成客户端代码。这样...
为了实现这一功能,ASP.NET AJAX框架提供了一种机制,即通过`[ScriptService]`特性来标记那些可以从客户端脚本调用的Web服务。本文将详细介绍`[ScriptService]`特性的使用方法及其背后的工作原理,并解决相关异常...