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
希望大侠帮忙啊,急需啊
分享到:
相关推荐
这个工程详细的介绍了webService服务客户端如何调用简单和复杂的webService,其中就包括传递的参数是对象类型,返回数据是数组类型,还有最简单的基本类型。压缩包里还配置说明,清晰的说明webService的整个过程,对...
webService在客户端调用webService在客户端调用webService在客户端调用webService在客户端调用webService在客户端调用webService在客户端调用webService在客户端调用webService在客户端调用webService在客户端调用...
WebService客户端调用WebService服务示例代码,java代码,纯手工,包括直接httpClient直接发送Saop报文调用和利用wsimport -keep 生成客户端代码后调用两种方式的示例。因涉及商务账户密码隐私,因此代码中的有些账号...
webservice客户端几种方式调用汇总,客户端代码生成及调用方式详细说明等
springboot整合CXF发布webservice和客户端调用 项目中每个类都有详细的注释,保证都能看懂,不失为一个学习springboot整合cxf来学习webservice发布调用的好例子
webservice ixfir 客户端端开发 对象传递使webservice开发更加简单快捷
xfire开发webservice与调用 用起来比axis简单,容易上手。没有axis那么复杂。性能也比axis好。附件里面包含教程文档及实例代码
本方法是用axis1.4技术,实现java客户端调用webservice。已经可实现过可行的,如果不行可加我QQ号302633进行详细解析。
soapui生成webservice客户端代码,比较详细的讲解了配置,以及生成客户端代码的步骤
之前webservice客户端调用,使用RPC客戶端接口调用方法,但发现此种调用方式针对携参方式并不适用。最后经过多种方式测试选择了OMFactory......调用。经测试好用
Java 调用webservice cxf客户端调用demo和服务端,包含jar包,服务端发布后直接用客户端调用
使用URLConnection,JAXB调用webservice的公共方法,简单好用,分享一下!
java axis客户端调用webservice,可应用于ofbiz框架。 解决网络上共享代码两次调用后会出现timeout的BUG
本实例是通过客户端通过WebService,调用数据库端方法的实例。 例子中包含cxf的jar包,在调用服务器端方法时,首先要在cmd中,通过wsdl生成服务器端的接口、接口实现类等相关的javal类。 cmd WSDL2JAVA ...
tomcat8配置HTTPS,简单webservice客户端调用[收集].pdf
客户端调用webservice的方式其一 soap请求,此例子演示的是根据订单号获取订单的物流信息
webservice客户端生成工具
WebService客户端 WebService客户端 WebService客户端
客户端调用webservice所需完整jar包,可用,客户端调用webservice所需完整jar包,可用
webService客户端和调用服务 包含该全部jia包