CXF 和 axis都是非常不错的webservice的技术框架。最近项目需要了解了一下两个框架的访问。
首先说一下axis2客户端对axis2服务器的访问常用的两种方式:
1.用call方式
import org.apache.axis.client.Service;
import org.apache.axis.client.Call;
import javax.xml.namespace.QName;
public class TestClient {
public static void main(String[] args) {
try {
String name = "fei";
//服务发布地址
String endpoint = "####/service";
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(endpoint);
//第一个参数是命名空间,第二个参数是调用的方法
call.setOperationName(new QName("http://**", "method"));
System.out.println(call.getTargetEndpointAddress());
String result = (String)call.invoke(new Object[]{name});
System.out.println(result);
} catch(Exception e) {
e.printStackTrace();
}
}
}
2.rpc调用方式
import javax.xml.namespace.QName;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
public class RPCClient
{
public static void main(String[] args) throws Exception
{
// 使用RPC 方式调用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定调用WebService 的URL
EndpointReference targetEPR = new EndpointReference(
"http://**/Service");
options.setTo(targetEPR);
// 指定访问 方法的参数值
Object[] ob = new Object[] {"fei"};
// 指定访问 方法返回值的数据类型的Class 对象
Class[] classes = new Class[] {String.class};
// 指定要调用的方法及WSDL 文件的命名空间
// QName 第一个参数为命名空间即文件中xschema中targetnamespace的值
QName qob = new QName("**", "method");
// 调用访问 方法并输出该方法的返回值
System.out.println(serviceClient.invokeBlocking(qob, ob, classes)[0]);
}
}
CXF客户端对对CXF服务器的访问,很简单。
JaxWsProxyFactoryBean jaxfactory = new JaxWsProxyFactoryBean();
jaxfactory.getInInterceptors().add(new LoggingInInterceptor());
jaxfactory.getOutInterceptors().add(new LoggingOutInterceptor());
jaxfactory.setServiceClass(*Service.class);
jax factory.setAddress("http://*/service?wsdl");
*Service client = (*Service)jax factory.create();
client.method("参数");
这里说的CXF客户端访问是不需要axis的类接口的,是通过动态创建客户端来实现的。
这里注意CXF中cxf版本和jaxb的版本匹配,否则会出现无法创建的错误java.lang.reflect.UndeclaredThrowableException等异常。
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
public class testClient {
private testClient() {
}
public static void main(String args[]) {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http:**/*service?wsdl");
Thread.currentThread().setContextClassLoader(cl);
try {
//invoke第一个参数是方法名称,第二个是参数
Object[] objects = client.invoke("method", "fei");
System.out.println("返回对象的长度:" + objects.length);
System.out.println(objects[0].toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
cxf客户端调用axis服务端流程
cxf客户端调用axis服务端流程.docxcxf客户端调用axis服务端流程.docx
CXF 客户端最少jar包支持,CXF 客户端最少jar包支持,CXF 客户端最少jar包支持,
Cxf客户端及服务器端,实现客户端和服务器端的权限验证,可以直接运行,很简单,开始研究cxf的时候很少有权限验证的资源,所有我实现 了之后,拿来跟大家分享
CXF客户端调用例子,本例子开发语言为JAVA,包内包含服务端跟客户端
apache-cxf-2.7.7以及cxf客户端所需要的jar包,命令生成webservice客户端
CXF客户端生成器,可以直接进入bin目下,运行wsdl2java
cxf调用webservice,客户端最少jar包,只需4个,告别找jar包的繁琐
基于SSL验证的Apache CXF客户端设计 1,服务器端Tomcat配置SSL支持 2,服务器端Web Service接口设计 3,客户端访问设计,包括代码和配置文件 详情请看博客:...
Java 调用webservice cxf客户端调用demo和服务端,包含jar包,服务端发布后直接用客户端调用
springboot整合CXF发布webservice和客户端调用 项目中每个类都有详细的注释,保证都能看懂,不失为一个学习springboot整合cxf来学习webservice发布调用的好例子
springmvc+mybatis+cxf+客户端+服务器端+soap+rest方式+内部有数据库
webservice cxf 客户端创建实例
cxf客户端出现GBK编码问题解决cxf客户端出现GBK编码问题解决jar.rar
webservice客户端,框架为CXF,生成客户端的方式为自动(myeclipse生成)
CXF 开发手册, 包括下载,配置,客户端调用远程服务以及发布自己的接口为服务,供别人调用的全过程
自己写的代码(CXF生成的webservice客户端添加soapHeader代码),用到的工具和jar包都包含在里面,仅供参考,
CXF客户端调用需要的最少包,版本cxf-2.7.18.jar。其中fastjson-1.2.34.jar是非必须的
cxf生成客户端 服务端代码
08.CXF拦截器的理论以及如何为CXF的客户端和服务器端添加拦截器