`
lzwlt
  • 浏览: 32447 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

使用CXF实现WebService,并在客户端实现动态调用

阅读更多

WebService实现
1、 整个项目使用CXF来实现,在实现的过程中,在MyEclipse中对CXF下lib中的所有jar文件通过引入外部包来处理。
2、 在MyEclipse6.5中可以实现服务器端和客户端,但是客户端在使用wsdl进行动态调用的过程中总是报错,最后使用MyEclipse9.0实现了进行动态调用的实现。其中发生的错误如下:
(1)Exception in thread "main" java.lang.LinkageError: 正在从引导类加载器加载 JAXB 2.1 API, 但此 RI (来自jar:file:/D:/CXF/lib/jaxb-impl-2.2.5.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) 需要 2.2 API。请使用授权目录机制将 jaxb-api.jar 放在引导类加载器中。(请参阅 http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
解决办法:
通过删除引入包中的jaxb-impl-2.2.5.jar文件可以解决。
(2)java.lang.IllegalArgumentException: Can not set final com.sun.tools.internal.xjc.reader.internalizer.InternalizationLogic field com.sun.tools.internal.xjc.reader.internalizer.DOMForest.logic to org.apache.cxf.endpoint.dynamic.DynamicClientFactory$1
解决办法:
此错误最后还是没有解决,不知道如何解决。
3、 在MyEclipse9.0实现时又发生如下错误:
org.apache.cxf.common.i18n.UncheckedException: No operation was found with the name {http://impl.cxf.com/}sayHello.
4、 原因在于@WebService说明中没有使用targetNamespace造成的。
@WebService(endpointInterface="com.cxf.interfaces.IHelloWorldService",serviceName="helloWorldService")
修改如下:
@WebService(endpointInterface="com.cxf.interfaces.IHelloWorldService",serviceName="helloWorldService",targetNamespace="http://interfaces.cxf.com/")
5、 整个程序代码如下:
(1)接口的定义:
package com.cxf.interfaces;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface IHelloWorldService {
   
    String sayHello(@WebParam(name="username") String username);
   
}
(2)服务器端的实现:
package com.cxf.impl;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;
import com.cxf.interfaces.IHelloWorldService;

@WebService(endpointInterface="com.cxf.interfaces.IHelloWorldService",serviceName="helloWorldService",targetNamespace="http://interfaces.cxf.com/")
public class Server implements IHelloWorldService{

    public String sayHello(String username) {
        return "Hello,"+username;
    }
    public static void main(String[] args) {
        Server impl=new Server();
        String address="http://127.0.0.1:9000/hello";
        Endpoint.publish(address, impl);
    }
}
(3)客户端的实现:
package com.cxf.client;

import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

public class ClientFromWsdl {
   

    public static void main(String[] args) {
    try
    {
    JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
    org.apache.cxf.endpoint.Client client = dcf.createClient("http://127.0.0.1:9000/hello?wsdl");
            //sayHello 为接口中定义的方法名称   张三为传递的参数   返回一个Object数组
    Object[] objects=client.invoke("sayHello", "张三");   
    //输出调用结果
    System.out.println(objects[0].toString());
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
}
(4)客户端的实现(非动态的)
package com.cxf.client;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.cxf.interfaces.IHelloWorldService;

public class Client {
    public static void main(String[] args) {
        JaxWsProxyFactoryBean  factoryBean=new JaxWsProxyFactoryBean();
        factoryBean.getInInterceptors().add(new LoggingInInterceptor());
        factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
        factoryBean.setServiceClass(IHelloWorldService.class);
        factoryBean.setAddress("http://localhost:9000/hello");
        IHelloWorldService impl=(IHelloWorldService) factoryBean.create();
        System.out.println(impl.sayHello("张三"));
    }
}
分享到:
评论
1 楼 pythoneer 2012-06-26  
上面的 2 - (2) 我也遇到了,又是 ClassLoader 的現象,所以乾脆就把 cxf 附帶的 jaxb-api-*.jar, jaxb-impl-*.jar, jaxb-xjc-*.jar 一塊放進來,不去依賴 JDK 内建的 jaxb lib,應該能解除這個問題

相关推荐

    Java cxf开发webservice,分别有客户端和服务端

    在服务端 对外开放接口服务,然后在客户端 调用服务端的方法, 实现客户端(一个javaweb项目)对服务端(javaweb项目)方法的调用, 实际上就是发送和接收消息,实现两个系统间消息的传递 jar包都在lib项目里 具体...

    springboot整合CXF发布webservice和客户端调用

    - 对于客户端调用,可以使用CXF的`JaxWsProxyFactoryBean`创建服务代理对象,然后调用其方法进行服务调用。 4. **项目结构** - `.classpath`和`.project`是Eclipse IDE的项目配置文件。 - `pom.xml`是Maven的...

    使用CXF和camel-cxf调用webservice

    你可以使用CXF的工具,如wsdl2java,将这个WSDL文件转换为Java客户端代码,然后在项目中引用这些代码来调用Web服务。 总的来说,Apache CXF和camel-cxf提供了强大的工具集,帮助开发者高效地集成和管理Web服务。...

    CXF动态webservice客户端demo

    这个"CXF动态webservice客户端demo"是为了演示如何使用CXF库创建一个动态调用Web服务接口的客户端应用程序。 首先,我们需要了解Web服务的基本概念。Web服务基于SOAP(Simple Object Access Protocol)协议,通过...

    cXF实现webservice 服务端和客户端

    这个接口通常会包含一些方法,这些方法将在服务端实现并由客户端调用。 ```java public interface HelloWorld { String sayHello(String name); } ``` 2. 实现服务接口:接下来,我们需要创建一个类来实现这个...

    Java webservice cxf客户端调用demo和服务端

    Java WebService CXF客户端调用和服务端的实现是企业级应用程序中常见的通信方式,它基于标准的SOAP(Simple Object Access Protocol)协议,提供了一种在分布式环境中交换信息的方法。CXF是一个开源框架,它简化了...

    CXF 一个完整的webService(整合客户端和服务端)

    CXF不仅简化了Web服务的开发,而且允许开发者无缝地在客户端和服务端之间切换,从而实现双向通信。 **1. CXF入门** 对于初学者,了解CXF的基本概念是至关重要的。CXF基于JAX-WS(Java API for XML Web Services)...

    Springboot整合CXF发布Web service和客户端调用(用户和密码验证)

    在IT行业中,Spring Boot是一个非常流行的微服务框架,它简化了Spring应用的初始化和配置。而Apache CXF则是一个强大的...通过这种方式,你可以构建安全、可靠的Web服务,并在Spring Boot环境中轻松地进行客户端调用。

    CXF协议WebService+Spring客户端和服务端程序,实现了多数据源动态切换

    本项目重点是利用CXF实现基于Spring的Web服务客户端和服务端程序,并且具有多数据源动态切换的功能。 首先,让我们详细讨论CXF框架。CXF是一个Java框架,它提供了一种灵活的方式来构建和部署Web服务。CXF支持WS-*...

    cxf客户端调用webservice所需jar包

    当我们需要在客户端调用Web服务时,CXF扮演着关键角色。本篇将详细讲解如何利用CXF客户端来调用Web服务以及所需的jar包。 首先,让我们了解CXF的基本概念。CXF是一个用于构建和服务导向架构(SOA)应用程序的开源...

    cxf 开发webservice客户端

    在IT行业中,CXF是一个广泛使用的开源框架,用于开发和实现Web服务,无论是SOAP(简单对象访问协议)还是RESTful风格的服务。本篇文章将详细探讨如何利用CXF框架开发一个Web服务客户端,以及如何进行测试。 一、CXF...

    CXF作为客户端调用webService的demo

    用CXF作为客户端调用webService的demo:本人亲测可用,eclipse工程项目包含完整代码和完整jar包, 只要用eclipse导入项目即可,运行控制台显示success或者false字符串,说明OK。

    cxf的webservice的客户端代码

    在这个“cxf的webservice的客户端代码”主题中,我们将深入探讨如何使用CXF框架来构建一个能够与Web服务交互的客户端。 首先,创建CXF Web服务客户端的核心在于理解服务代理的生成。CXF提供了WSDL2Java工具,可以从...

    CXF webservice 动态地址客户端相关代码和jar包

    9. **测试和调试**:在开发过程中,使用动态地址的客户端可能需要更复杂的测试环境。可以利用Mock服务或工具模拟不同服务地址的行为,便于调试和测试。 总之,CXF Webservice动态地址客户端允许应用程序在不修改...

    CXF建立webservice服务端和客户端

    4. **启动服务**:最后,启动CXF服务器,服务端点就会对外提供服务,等待客户端调用。 现在转向客户端,创建CXF SOAP客户端涉及以下步骤: 1. **生成客户端代理类**:CXF提供了工具,如wsdl2java,可以从服务的...

    webservice的cxf框架客户端调用所需jar包

    在使用CXF框架进行Web服务客户端调用时,需要依赖一系列的JAR包来确保功能的正常运行。这些JAR包包含了CXF框架的核心组件、XML处理库、数据序列化工具、缓存机制、消息队列通信以及Spring框架的支持。 1. `cxf-core...

    使用CXF搭建webService服务

    使用cxf搭建webService,客户端通过接口进行调用

    使用CXF开发WebService服务器端和客户端

    开发WebService客户端** - **生成客户端代码**:CXF提供wsdl2java工具,可以从WSDL文件生成客户端所需的Java类和配置。 - **配置客户端**:配置客户端代理,设置服务地址等信息。 - **调用服务**:通过生成的客户端...

    WebService开发客户端 cxf方式

    本篇文章将详细探讨如何使用CXF框架来开发WebService客户端。 一、CXF简介 CXF是一个开源的Java框架,它支持构建和部署SOAP(简单对象访问协议)和RESTful(Representational State Transfer)Web服务。CXF提供了...

Global site tag (gtag.js) - Google Analytics