实现了用axis客户端调用cxf服务端:
服务端如下:
package com.cxfserver;
import javax.jws.WebService;
import com.cxfserver.type.SayHelloInput;
import com.cxfserver.type.SayHelloOutput;
@WebService(endpointInterface = "com.cxfserver.EchoService", serviceName = "echoService")
public class EchoServiceImpl implements EchoService {
public String broadcastEcho(String echo) {
return "hello hold on";
}
public SayHelloOutput sayHello(SayHelloInput input) {
// TODO Auto-generated method stub
SayHelloOutput output = new SayHelloOutput();
output.setMyAnswer("your echo:"+input.getEcho());
output.setRandom(13);
return output;
}
}
客户端代码如下:
package com.cxfserver;
import java.rmi.registry.Registry;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.TypeMapping;
import org.apache.axis.encoding.TypeMappingRegistry;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import org.apache.axis.soap.SOAPConstants;
import com.cxfserver.type.SayHelloInput;
public class DynamicClient {
public static void main(String[] args) throws Exception {
String endPointURI = "http://localhost:8080/cxf_server/services/EchoServiceImplPort?wsdl";
/*{
Service s = new Service();
Call call = (Call)s.createCall();
QName qn = new QName("http://cxfserver.com/", "broadcastEcho");
call.setOperationName(qn);
call.setTargetEndpointAddress(new java.net.URL(endPointURI));
call.addParameter("broad", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(new QName("",""),String.class);
String [] input = {"macrox"};
Object o = call.invoke(input);
System.out.println("");
}*/
{
Service s = new Service();
javax.xml.rpc.encoding.TypeMappingRegistry r = s.getTypeMappingRegistry();
javax.xml.rpc.encoding.TypeMapping map = r.getDefaultTypeMapping();
QName qn = new QName("http://cxfserver.com/","arg0");
QName rn = new QName("http://cxfserver.com/","sayHelloResponse");
Class qClass = Class.forName("com.cxfserver.type.SayHelloInput");
Class rClass = Class.forName("com.cxfserver.type.SayHelloOutput");
map.register(qClass, qn, new BeanSerializerFactory(qClass,qn), new BeanDeserializerFactory(qClass,qn));
map.register(rClass, rn, new BeanSerializerFactory(rClass,rn), new BeanDeserializerFactory(rClass,rn));
Call call = (Call)s.createCall();
call.setSOAPVersion(SOAPConstants.SOAP11_CONSTANTS);
QName qne = new QName("http://cxfserver.com/", "sayHello");
call.setOperationName(qne);
call.setEncodingStyle(org.apache.axis.Constants.NS_PREFIX_SCHEMA_XSD);
call.addParameter("arg0", qn, ParameterMode.IN);
//call.setReturnQName(rn);
call.setReturnType(rn);
call.setUseSOAPAction(true);
//call.addParameter("return", rn, ParameterMode.OUT);
call.setTargetEndpointAddress(new java.net.URL(endPointURI));
com.cxfserver.type.SayHelloInput input = new com.cxfserver.type.SayHelloInput();
input.setEcho("i am client");
input.setSay("i am client say");
Object [] o = {input};
Object ro = call.invoke(o);
System.out.println("");
}
}
}
如果使用默认的axis 编码方式,soap将使用 ref multip风格,cxf默认服务端将不能够解析出里面的参数:修改前的报文如下:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:sayHello soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://cxfserver.com/">
<input href="#id0"/>
</ns1:sayHello>
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:input" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://cxfserver.com/"><echo xsi:type="soapenc:string">i am client</echo><say xsi:type="soapenc:string">i am client say</say></multiRef></soapenv:Body></soapenv:Envelope>
修改后的代码如下:
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><ns1:sayHello soapenv:encodingStyle="xsd" xmlns:ns1="http://cxfserver.com/"><arg0 xsi:type="ns1:arg0"><echo xsi:type="xsd:string">i am client</echo><say xsi:type="xsd:string">i am client say</say></arg0></ns1:sayHello></soapenv:Body></soapenv:Envelope>
分享到:
相关推荐
总之,使用CXF客户端调用Axis服务端涉及多个步骤,包括生成客户端代码、配置客户端、创建服务代理以及进行实际调用。理解这些步骤并正确实现它们是成功通信的关键。在实际开发过程中,可能会遇到各种问题,需要耐心...
要深入学习这个主题,可以参考博客“WebService:Axis客户端调用需要身份验证的CXF服务”。这个博客很可能详细解释了如何在实际代码中实现上述步骤,包括如何配置Axis客户端、如何处理认证头以及如何与CXF服务进行...
在描述中,“用框架cxf调用axis2提供的接口服务的一个简单例子”,意味着我们将探讨一个简单的CXF客户端如何与Axis2服务端进行交互。这通常涉及到以下步骤: 1. **创建CXF客户端**:首先,我们需要创建一个CXF...
在本文中,我们将重点关注CXF客户端调用Web服务的方法,特别是处理Map类型参数的问题。 首先,CXF客户端调用Web服务时,通常会通过服务接口类来实现。在给出的示例中,`TestService`接口定义了几个服务方法,如`...
为了能够通过Axis 1.4客户端调用上面部署的WebService,需要对生成的WSDL文件进行一定的修改,使其符合Axis 1.4的要求。 **步骤四:修改WSDL文件** 1. **下载WSDL文件**:通过访问服务的WSDL URL将其保存为`...
5. **测试服务**:创建一个Web服务客户端,调用服务接口进行测试。可以使用CXF或Axis2提供的客户端工具,或者编写自己的Java代码。 6. **运行实例**:运行客户端,你应该能在控制台看到服务返回的“Hello, name”...
【CXF、AXIS2、XFire 客户端调用方法详解】 在Web服务开发中,CXF、AXIS2和XFire是常见的Java API,用于构建和消费SOAP(简单对象访问协议)服务。这些框架提供了丰富的功能,使得开发者能够方便地创建和调用Web...
在Java Web项目中,调用.NET WCF发布的Web服务时,常常会遇到选择合适的Web服务客户端框架的问题。本文主要对比了三种流行的Java Web服务...因此,对于新项目,推荐使用CXF作为调用.NET WCF Web服务的Java客户端框架。
本文将详细讲解如何使用Axis2来发布Web服务以及如何生成客户端代码来调用这些服务。 首先,让我们了解发布Web服务的过程: 1. **创建WebService**:在Axis2中,可以通过编写一个简单的Java类并暴露其方法作为Web...
在本文中,我们将深入探讨如何使用CXF进行客户端调用远程服务以及发布自己的服务。 ### 1. 下载与配置CXF环境 首先,访问Apache CXF官方网站(http://cxf.apache.org/download.html)下载最新版本的CXF。完成下载...
CXF 客户端调用提供了一种更稳定的方法,尤其是在调用 CXF 自身发布的服务时更为方便。 **调用示例:** - 使用 CXF 客户端调用或其他方式调用 ### 总结 以上介绍了 WebService 的四种常见发布方式及其客户端调用...
静态调用需要依赖服务类,因为客户端调用CXF WebService接口的过程中需要服务器端提供服务。这可能会带来一些不便捷的地方,例如,如果同一个项目中没有提供服务类,那么静态调用将无法工作。 动态调用 动态调用是...
4. **CXF服务部署**:CXF提供多种部署方式,包括独立服务器、Tomcat等应用服务器,以及Spring容器。通过修改CXF的配置文件,可以控制服务的行为,如端口号、绑定地址等。 5. **测试Web服务**:在提供的...
在这个场景下,"Xfire客户端调用webservice jar包"是指Xfire客户端为了实现某些功能,如获取服务器数据或更新信息,需要调用Web服务的接口。这些接口通常以Java的jar包形式提供,方便开发者集成到他们的应用中。 ...
- **WSDL到Java**:从服务端获取WSDL文件,使用CXF或Axis提供的工具将其转换为Java客户端代码,然后在自己的应用中引入这些生成的类来调用服务。 - **动态代理**:对于CXF,可以通过JAX-WS API动态生成客户端代理...
5. 消费服务:客户端可以通过生成的客户端 stub 或者直接使用JAX-WS API来调用服务。 在使用Apache Axis时,开发者可以使用Axis提供的工具生成客户端代码,这些代码包含了与服务交互所需的全部逻辑。而使用Apache ...
在客户端调用WebService时,这个库用于解析服务的WSDL文件,从而生成相应的代理类,使得客户端代码能够方便地调用服务。 3. **axis-jaxrpc-1.4.jar**:这个jar包是Apache Axis的一部分,它实现了JAX-RPC(Java API ...
- **Axis2客户端**:Axis2不仅用于服务端,还有客户端库,可以方便地从Java应用中调用Web服务。 - **Web服务的生命周期管理**:包括服务的创建、部署、测试和调试,这些过程在Axis2中都有详细的指南和支持。 - **...