`
wanghuanqiu
  • 浏览: 109512 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

axis和cxf客户端对cxf服务器的访问及常见问题

阅读更多

 上一篇博客简单介绍了axis2和CXF客户端axis2服务端的访问,包括复杂类型的访问如传递对象参数。本篇博客在前一篇的基础上进一步详解axis和CXF对CXF服务端的访问,并介绍常见的错误及原因。

本章介绍axis和cxf客户端对cxf服务端的访问

首先介绍服务端的代码结构;
建立包文件
:com.demo

所用到得java类

HelloWorld.java(接口)

HelloWorldImpl.java(实现)

User.java(用到得bean)

将三个类放在包中

axis客户端调用服务:

首先客户端需要分析wsdl文件通过“http://**/service/HelloWorld?wsdl”访问

建立用到的User类并且要建立同样的包结构如服务端,包结构即wsdl中targetNamespace的值

客户端:com.demo  放入User类

调用服务的代码:介绍rpc调用方式

  RPCServiceClient serviceClient = new RPCServiceClient();
  Options options = serviceClient.getOptions();
  // 指定调用WebService 的URL
  EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:8088/*/webservices/HelloWorld");
  options.setTo(targetEPR);
  // 指定访问 方法的参数值
  Object[] opAddEntryArgs = new Object[] { "fei" };
  // 指定访问 方法返回值的数据类型的Class 对象
  Class[] classes = new Class[] { String.class };
  // 指定要调用的方法及WSDL 文件的命名空间
  // QName 第一个参数为命名空间即文件中xschema中targetnamespace的值
  QName opAddEntry = new QName("http://demo.com/", "方法名称");
  // 调用访问 方法并输出该方法的返回值
  System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]);
  QName name1 = new QName("http://demo.com/", "方法名称");
  User user = new User(“姓名”,年龄);

  Object[] object = new Object[] { user };
  Class[] classes1 = new Class[] { String.class };
  System.out.println(serviceClient.invokeBlocking(name1, object, classes1)[0]);

运行程序,便可成功访问

这里要强调,service端不可以用webservice的相关注解,如WebMethod,Webresult,Webparam等注解。否则会出现unexpected element (uri:"", local:"args0").错误

另外如果包结构不对会出现http://unknown.namespace/}的错误

CXF客户端的访问:

同样CXF的客户端包结构要与服务端的一致。首先在获取wsdl文件,分析文件,建立自己的包装bean

如建立IHelloWorld接口包装HelloWorld接口。只是将所有的方法声明一下。如果服务端使用了如WebMethod,Webresult,Webparam等注解那么包装bean同样要声明。

客户端访问服务的代码如下:

  JaxWsProxyFactoryBean factory1 = new JaxWsProxyFactoryBean();
  factory1.setServiceClass(IHelloWorld.class);
  factory1.setAddress("http://127.0.0.1:8088/*/webservices/HelloWorld");
  QName qName1 = new QName("http://demo.com/");
  factory1.setServiceName(qName1);
  IHelloWorld service = (IHelloWorld) factory1.create();
  System.out.println(service.方法("参数"));
  User user = new User();
  user.setAge(25);
  user.setName("fei");
  System.out.println(service.方法(user));

分享到:
评论
6 楼 ipuhua 2016-10-26  
写得很好,很详细。感谢!!
5 楼 boolean2011 2016-05-19  
大哥,有没有axis调用cxf服务端的例子呢
4 楼 wanghuanqiu 2012-06-28  
LeamenLi 写道
@WebParame 还是挺有用的,打开wsdl文件查看调用方法的参数时如果只有一堆 arg0,arg1 确实让人头疼的。 axis2在这方面确实做得不好,这些东西是很基本的,它没有很好地支持。我现在改用CXF 来调用就没有这个问题了。

axis2应该可以在返回的报文中,修改参数名称
3 楼 LeamenLi 2012-06-27  
@WebParame 还是挺有用的,打开wsdl文件查看调用方法的参数时如果只有一堆 arg0,arg1 确实让人头疼的。 axis2在这方面确实做得不好,这些东西是很基本的,它没有很好地支持。我现在改用CXF 来调用就没有这个问题了。
2 楼 wanghuanqiu 2012-06-27  
LeamenLi 写道
"这里要强调,service端不可以用webservice的相关注解,如WebMethod,Webresult,Webparam等注解。否则会出现unexpected element (uri:"", local:"args0").错误"

你好,请问这个问题现在有没有解决方案呢?如果我确实需要加上@WebParam的注解,有没有其他方法可以避免出错呢?

我觉得正常是不会出现这种问题的,但是确实遇到了。你也可以用call的方式试试,或者用wsdltojava工具生成代码。你自己试一下,我不知道是不是我哪个地方弄错了
1 楼 LeamenLi 2012-06-27  
"这里要强调,service端不可以用webservice的相关注解,如WebMethod,Webresult,Webparam等注解。否则会出现unexpected element (uri:"", local:"args0").错误"

你好,请问这个问题现在有没有解决方案呢?如果我确实需要加上@WebParam的注解,有没有其他方法可以避免出错呢?

相关推荐

    cxf客户端调用axis服务端流程

    在Java开发中,CXF和Axis是两种广泛使用的Web服务框架。CXF主要用来创建和消费SOAP和RESTful Web服务,而Axis则是Apache组织早期推出的一款Web服务框架,主要用于SOAP服务。本文将深入探讨如何使用CXF客户端调用Axis...

    webservice axis2 cxf jar包及简单实例

    它还具有强大的代码生成工具,可以从WSDL(Web服务描述语言)文件自动生成服务端和客户端代码,简化开发过程。 接着,我们来看`CXF`。CXF也是一个开放源代码的Web服务框架,它继承了XFire和Apache SOAP项目的优势。...

    cxf开发webservice客户端和服务器端文档

    cxf开发webservice客户端和服务器端 cxf(Apache CXF)是一款开源的WebService框架,用于开发webservice客户端和服务器端。它提供了许多有用的功能,如自动生成服务桩、客户调用桩和WSDL文档等,使得开发webservice...

    Axis和CXF的比较

    在众多实现SOAP Web服务的技术栈中,Apache Axis和Apache CXF是两个非常流行的选择。本文将深入探讨这两个框架的关键特性、应用场景以及它们之间的主要区别,以帮助开发者根据项目需求做出合适的选择。 #### 二、...

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

    2. **使用KeyStore和TrustStore**:对于基于证书的认证,客户端需要加载自己的KeyStore,包含私钥和证书,以及服务器的TrustStore,包含服务器的公钥证书。在Axis中,这些可以通过`AxisClient`或`AxisProperties`类...

    Axis2,CXF版本学习笔记

    2. **CXF工具**:如CXF wsdl2java和cxf-codegen-plugin,用于生成服务和客户端代码。 3. **拦截器(Interceptor)和终结点处理器(Endpoint Publisher)**:这些组件允许你在消息传递过程中插入自定义逻辑。 4. **...

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

    CXF、AXIS2、XFire是三种流行的Java Web服务框架,它们允许开发者创建和消费Web服务。在本文中,我们将重点关注CXF客户端调用Web服务的方法,特别是处理Map类型参数的问题。 首先,CXF客户端调用Web服务时,通常会...

    cxf与axis2区别

    CXF和Axis2是两个流行的Webservice框架,都是由现有的项目逐渐演化而来的。Axis2是由Axis1.x系列演化而来,而Apache CXF则是由Celtix和XFire项目整合而生。在本文中,我们将探讨CXF和Axis2框架的区别,以帮助开发者...

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

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

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

    【WebService Axis和XFire(CXF)的开发流程】 在IT领域,WebService是一种基于XML的通信标准,用于构建分布式系统中的应用程序接口(API)。本篇主要介绍两种常用的WebService框架——Axis和XFire(现已被CXF合并)...

    Axis2与CXF的对比

    Apache Axis2和CXF都是Java世界中非常知名的Web服务框架,它们主要用于构建和部署Web服务。两者各有特色,适用于不同的应用场景。以下是对这两个框架特点、区别及适用场合的详细对比,以及它们在效率上的表现。 1. ...

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

    Apache CXF和Axis2都是流行的开放源码服务框架,它们各自在Web服务领域有着广泛的应用。 Apache CXF是一个强大的服务框架,它允许开发人员创建和消费各种类型的Web服务,包括SOAP、RESTful等。CXF集成了多种协议和...

    Axis1,Axis2,Xfire,CXF区别

    Axis1, Axis2, Xfire, CXF 是四种常用的WebService框架,它们之间有着不同的特点和应用场景。本文将对这四种框架进行详细的比较和分析,以帮助开发者选择合适的框架。 XFire 是一种新一代的 WebService 平台,它...

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

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

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

    其次,Axis2同样是Apache的一个重要项目,它是一个全面的Web服务框架,集成了SOAP、WSDL等技术,能够生成Java和其他语言的Web服务客户端和服务器端代码。尽管其功能强大,但这也导致了Axis2的复杂性,可能不适合简单...

    Axis-cxf-WebService.zip

    本示例探讨了两种常见的Java WebService实现方式:Apache Axis和Apache CXF,它们都是开源的SOAP(简单对象访问协议)和RESTful服务框架。以下是关于这两种技术的详细解释及其在实际应用中的使用。 Apache Axis是最...

    使用cxf wsdl2java生成webservice客户端

    使用cxf wsdl2java生成webservice客户端命令

    cxf+spring+axis包

    【描述】"cxf-2.4.1+axis-1.4,整合spring3.0所用jar包"说明了这个压缩包的目的,即为开发者提供了一套完整的环境,用于在Spring 3.0框架下整合Apache CXF(一个开源的服务端和客户端Web服务实现)和Axis(一个用于...

    axis cxf 创建webservice

    本文介绍了如何使用Eclipse、Axis2以及Spring和CXF来创建和调用WebService。通过实际操作步骤,读者可以了解到构建WebService的基本流程和技术要点。无论是对于初学者还是有一定经验的开发者来说,都能够从中获得...

Global site tag (gtag.js) - Google Analytics