`
macrox
  • 浏览: 5640 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

axis客户端调用CXF服务段

    博客分类:
  • SOA
阅读更多

实现了用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服务端流程

    总之,使用CXF客户端调用Axis服务端涉及多个步骤,包括生成客户端代码、配置客户端、创建服务代理以及进行实际调用。理解这些步骤并正确实现它们是成功通信的关键。在实际开发过程中,可能会遇到各种问题,需要耐心...

    WebService:Axis客户端调用需要身份验证的CXF服务

    要深入学习这个主题,可以参考博客“WebService:Axis客户端调用需要身份验证的CXF服务”。这个博客很可能详细解释了如何在实际代码中实现上述步骤,包括如何配置Axis客户端、如何处理认证头以及如何与CXF服务进行...

    myService_purpose1sv_cxf调用axis2的接口服务_接口服务_

    在描述中,“用框架cxf调用axis2提供的接口服务的一个简单例子”,意味着我们将探讨一个简单的CXF客户端如何与Axis2服务端进行交互。这通常涉及到以下步骤: 1. **创建CXF客户端**:首先,我们需要创建一个CXF...

    cxf_axis_xfire客户端调用的几种方法[收集].pdf

    在本文中,我们将重点关注CXF客户端调用Web服务的方法,特别是处理Map类型参数的问题。 首先,CXF客户端调用Web服务时,通常会通过服务接口类来实现。在给出的示例中,`TestService`接口定义了几个服务方法,如`...

    webservice :spring 3+cxf3.4服务方,AXIS1.4请示方调用

    为了能够通过Axis 1.4客户端调用上面部署的WebService,需要对生成的WSDL文件进行一定的修改,使其符合Axis 1.4的要求。 **步骤四:修改WSDL文件** 1. **下载WSDL文件**:通过访问服务的WSDL URL将其保存为`...

    webservice axis2 cxf jar包及简单实例

    5. **测试服务**:创建一个Web服务客户端,调用服务接口进行测试。可以使用CXF或Axis2提供的客户端工具,或者编写自己的Java代码。 6. **运行实例**:运行客户端,你应该能在控制台看到服务返回的“Hello, name”...

    cxf_axis_xfire客户端调用的几种方法.docx

    【CXF、AXIS2、XFire 客户端调用方法详解】 在Web服务开发中,CXF、AXIS2和XFire是常见的Java API,用于构建和消费SOAP(简单对象访问协议)服务。这些框架提供了丰富的功能,使得开发者能够方便地创建和调用Web...

    搜集网上的资料总结的XFire,Axis2,CXF的对比

    在Java Web项目中,调用.NET WCF发布的Web服务时,常常会遇到选择合适的Web服务客户端框架的问题。本文主要对比了三种流行的Java Web服务...因此,对于新项目,推荐使用CXF作为调用.NET WCF Web服务的Java客户端框架。

    axis2发布webservice和调用axis2服务接口

    本文将详细讲解如何使用Axis2来发布Web服务以及如何生成客户端代码来调用这些服务。 首先,让我们了解发布Web服务的过程: 1. **创建WebService**:在Axis2中,可以通过编写一个简单的Java类并暴露其方法作为Web...

    CXF客户端调用以及发布服务

    在本文中,我们将深入探讨如何使用CXF进行客户端调用远程服务以及发布自己的服务。 ### 1. 下载与配置CXF环境 首先,访问Apache CXF官方网站(http://cxf.apache.org/download.html)下载最新版本的CXF。完成下载...

    webservice四种发布方式及客户端调用

    CXF 客户端调用提供了一种更稳定的方法,尤其是在调用 CXF 自身发布的服务时更为方便。 **调用示例:** - 使用 CXF 客户端调用或其他方式调用 ### 总结 以上介绍了 WebService 的四种常见发布方式及其客户端调用...

    Java调用CXF WebService接口的两种方式实例

    静态调用需要依赖服务类,因为客户端调用CXF WebService接口的过程中需要服务器端提供服务。这可能会带来一些不便捷的地方,例如,如果同一个项目中没有提供服务类,那么静态调用将无法工作。 动态调用 动态调用是...

    webService(基于cxf)的完整例子

    4. **CXF服务部署**:CXF提供多种部署方式,包括独立服务器、Tomcat等应用服务器,以及Spring容器。通过修改CXF的配置文件,可以控制服务的行为,如端口号、绑定地址等。 5. **测试Web服务**:在提供的...

    Xfire客户端调用webservice jar包

    在这个场景下,"Xfire客户端调用webservice jar包"是指Xfire客户端为了实现某些功能,如获取服务器数据或更新信息,需要调用Web服务的接口。这些接口通常以Java的jar包形式提供,方便开发者集成到他们的应用中。 ...

    WebService Axis和XFire(CXF)的开发流程

    - **WSDL到Java**:从服务端获取WSDL文件,使用CXF或Axis提供的工具将其转换为Java客户端代码,然后在自己的应用中引入这些生成的类来调用服务。 - **动态代理**:对于CXF,可以通过JAX-WS API动态生成客户端代理...

    关于WebService的实例及相关axis/apache-cxf的应用

    5. 消费服务:客户端可以通过生成的客户端 stub 或者直接使用JAX-WS API来调用服务。 在使用Apache Axis时,开发者可以使用Axis提供的工具生成客户端代码,这些代码包含了与服务交互所需的全部逻辑。而使用Apache ...

    客户端调用webservice所需完整jar包

    在客户端调用WebService时,这个库用于解析服务的WSDL文件,从而生成相应的代理类,使得客户端代码能够方便地调用服务。 3. **axis-jaxrpc-1.4.jar**:这个jar包是Apache Axis的一部分,它实现了JAX-RPC(Java API ...

    Axis2教程和java调用webservice的各种方法总结

    - **Axis2客户端**:Axis2不仅用于服务端,还有客户端库,可以方便地从Java应用中调用Web服务。 - **Web服务的生命周期管理**:包括服务的创建、部署、测试和调试,这些过程在Axis2中都有详细的指南和支持。 - **...

Global site tag (gtag.js) - Google Analytics