`

CXF的第一个例子 (附 wsdl详解)

    博客分类:
  • SOA
阅读更多

1、在eclipse中 创建一个java project。


2、把cxf的lib包中的jar文件放入项目的类路径。


3、4个文件如下:(cxf内置了jetty server, 省去了很多发布的麻烦)


HelloWorld.java

package test;
import javax.jws.WebService;
@WebService
public interface HelloWorld {    
    String sayHello(String str);
}

HelloWorldImpl.java

package test;
import javax.jws.WebService;
@WebService
public class HelloWorldImpl implements HelloWorld {
    public String sayHello(String str) {        
        System.out.println(" sayHello is called.");        
        return "Hello " + str +" !";
    }
}

MainServer.java

package test;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class MainServer {
    public static void main(String[] args) {        
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
        factory.setServiceClass(HelloWorldImpl.class);
        factory.setAddress("http://localhost:8080/HelloWorld");        
        Server server = factory.create();
        server.start();
    }
}

HelloWorldClient.java

package test;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public class HelloWorldClient {
    public static void main(String[] args) {
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setAddress("http://localhost:8080/HelloWorld");
        factory.setServiceClass(HelloWorld.class);
        HelloWorld helloworld = (HelloWorld) factory.create();
        System.out.println(helloworld.sayHello("CY"));
    }
}


4、先运行MainServer.java,(即启动服务器,发布server);

再运行HelloWorldClient.java,可以看到结果。

通过访问 http://localhost:8080/HelloWorld?wsdl  可以看web service 是否发布成功。


================ WSDL 文件 剖析 =========================

 

// 这里的name 是 发布的service类名 + “Service”, targetNamespace 是取决于 发布类所在的包

<wsdl:definitions name="HelloWorldImplService" targetNamespace="http://test/">
  // types 的作用是 定义 输入输出参数 都是什么样子的(类型)
  <wsdl:types >
    <xs:schema elementFormDefault="unqualified" targetNamespace="http://test/" version="1.0">

         // 输入参数名字为‘sayHello’,类型是复杂类型‘sayHello’,在下面定义
      <xs:element name="sayHello" type="tns:sayHello"/>

         // 输出参数名字为‘sayHelloResponse’,类型是复杂类型sayHelloResponse, 在下面定义
      <xs:element name="sayHelloResponse" type="tns:sayHelloResponse"/>

          // 输入参数类型的具体定义:包含一个element, 名字为arg0,类型为string
      <xs:complexType name="sayHello">
        <xs:sequence>

               // 这里的name 是自动生成的。当然,也可以在代码中指定名字。

               // public @WebResult(name="sayHelloResult")String sayHello(@WebParam(name="name")String str)
          <xs:element minOccurs="0" name="arg0" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
      <xs:complexType name="sayHelloResponse">
        <xs:sequence>
          <xs:element minOccurs="0" name="return" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:schema>
  </wsdl:types>
  // 这个message代表 输入信息。这个输入信息的类型是sayHello,在<types>中定义过
  <wsdl:message name="sayHello">
    <wsdl:part element="tns:sayHello" name="parameters">
    </wsdl:part>
  </wsdl:message>

   // 这个message代表 输出信息。这个输出信息的类型是sayHelloResponse,在<types>中定义过
  <wsdl:message name="sayHelloResponse">
    <wsdl:part element="tns:sayHelloResponse" name="parameters">
    </wsdl:part>
  </wsdl:message>
  // portType 就是我们定义的接口。一个接口对应一个port
  <wsdl:portType name="HelloWorld">

       // 这里的一个operation就是 接口中的一个方法
    <wsdl:operation name="sayHello">
    <wsdl:input message="tns:sayHello" name="sayHello">
      </wsdl:input>
    <wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse">
      </wsdl:output>
    </wsdl:operation>
  </wsdl:portType>
  // 把接口进行 soap 绑盯。
  <wsdl:binding name="HelloWorldImplServiceSoapBinding" type="tns:HelloWorld">

      // 这里指明 绑盯的协议为 http,style为document
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

       //  具体方法的绑盯类型定义
    <wsdl:operation name="sayHello">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="sayHello">

             // literal 文本
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="sayHelloResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  // 把n个接口放到一起,总称为一个service
  <wsdl:service name="HelloWorldImplService">

      // 这里一个port就是一个接口。对应的绑盯刚刚定义过
    <wsdl:port binding="tns:HelloWorldImplServiceSoapBinding" name="HelloWorldImplPort">

          // 这个接口的地址
      <soap:address location="http://localhost:8080/HelloWorld"/>
    </wsdl:port>
  </wsdl:service>
 
</wsdl:definitions>

分享到:
评论
1 楼 waltertan1988 2010-03-27  
我的写的例子和楼主的基本一样,而且程序也能正常执行,但生成的wsdl却比你少了很多啊。(myeclipse8+cxf2.2.7)
<wsdl:definitions name="HelloWorldImplService" targetNamespace="http://impl.services/">
<wsdl:import location="http://localhost:8080/HelloWorld?wsdl=HelloWorld.wsdl" namespace="http://services/">
    </wsdl:import>
−
<wsdl:binding name="HelloWorldImplServiceSoapBinding" type="ns1:HelloWorld">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
−
<wsdl:operation name="sayHello">
<soap:operation soapAction="" style="document"/>
−
<wsdl:input name="sayHello">
<soap:body use="literal"/>
</wsdl:input>
−
<wsdl:output name="sayHelloResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
−
<wsdl:service name="HelloWorldImplService">
−
<wsdl:port binding="tns:HelloWorldImplServiceSoapBinding" name="HelloWorldImplPort">
<soap:address location="http://localhost:8080/HelloWorld"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

请问是什么缘故吗?

相关推荐

    使用CXF: Java 2 WSDL

    1. **Apache CXF框架**:Apache CXF是一个用于构建和开发Web服务的开放源代码框架。它支持多种协议和绑定,如SOAP、RESTful HTTP、XML/HTTP、JMS等。CXF不仅允许你消费Web服务,还可以用来创建和发布自己的Web服务。...

    CXF的第一个例子helloWorld

    【标题】"CXF的第一个例子helloWorld"是一个基础教程,主要介绍了如何使用Apache CXF框架创建一个简单的Web服务。Apache CXF是一个开源的Java框架,它用于构建和开发Web服务,支持SOAP、RESTful等多种通信协议。这个...

    CXF生成的WSDL详解

    ### CXF生成的WSDL详解 #### 一、概述 WSDL(Web Services Description Language)是一种用于描述Web服务的标准XML格式。它包含了服务提供者如何访问该服务的信息,包括服务的位置、服务可用的方法以及这些方法...

    webService(基于cxf)的完整例子

    6. **CXF的WSDL第一方式**:CXF也支持WSDL第一方式,即先有WSDL描述服务,然后根据WSDL自动生成Java代码。这种方式适合于已有WSDL描述的服务,或者需要严格遵循WSDL规范的情况。 7. **CXF与Spring集成**:CXF与...

    WebService CXF --- 由WSDL文件开发Client端

    1. **获取WSDL文件**:首先,你需要一个有效的WSDL文件,该文件定义了Web服务的接口。这通常由服务提供者提供。 2. **使用CXF wsdl2java工具**:CXF提供了一个命令行工具`wsdl2java`,可以将WSDL转换为Java客户端...

    cxf-rt-wsdl-3.0.1-API文档-中文版.zip

    赠送jar包:cxf-rt-wsdl-3.0.1.jar; 赠送原API文档:cxf-rt-wsdl-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-wsdl-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-wsdl-3.0.1.pom; 包含翻译后的API文档:cxf-rt...

    apache-cxf生成wsdl

    1. **准备WSDL文件**:确保你有一个有效的WSDL文件,该文件定义了你想要生成Java代码的Web服务接口。WSDL文件应该包含了服务的端点、消息结构和操作描述。 2. **使用CXF的wsdl2java工具**:CXF提供了一个名为`wsdl2...

    Cxf例子Cxf例子我自己写的

    它支持WSDL(Web服务描述语言)第一和第二版,用于服务的描述和发现。 3. **创建服务**:使用CXF,你可以定义一个Java接口并将其暴露为Web服务。CXF会自动生成对应的WSDL,并处理客户端请求和服务器端响应。 4. **...

    使用cxf wsdl2java生成webservice客户端

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

    apache CXF wsdl2java工具使用说明

    ### Apache CXF wsdl2java 工具使用详解 #### 一、Apache CXF 概述 Apache CXF 是一个高性能、轻量级的开源框架,用于构建和使用基于 SOAP 和 REST 规范的 Web 服务。CXF 提供了强大的功能支持,包括 XML 数据的...

    CXF视频:2、WSDL结构分析

    在视频中,可能还会讲解如何使用CXF工具解析和生成WSDL,例如使用wsdl2java命令行工具将WSDL转换为Java类,或者使用cxf-codegen-plugin Maven插件自动化这个过程。此外,可能会涉及到CXF的动态客户端,它可以从WSDL...

    cxf入门例子(安全认证)

    通过学习这个例子,你将能够熟练地运用 CXF 创建安全的服务器端和客户端应用,同时也能够掌握如何配置和管理认证策略。这个过程将涉及到 Spring 配置、CXF 拦截器、HTTP 协议的认证头等关键技术点,对于提升你的 IT ...

    webservices-wsdl详解

    Web服务描述语言(WSDL,Web Services Description Language)是一种XML格式,用于定义网络服务的接口。它是构建基于SOAP(Simple Object Access Protocol)的Web服务的关键技术之一,允许开发者明确地描述服务的...

    CXF实现WebService详解实例

    1. **定义服务接口**:首先,我们需要定义一个Java接口,声明服务的方法。这些方法将在Web服务中暴露。 ```java import javax.jws.WebService; @WebService public interface HelloWorld { String sayHello(String ...

    CXF下基于已发布WSDL获取远程服务

    当我们拥有一个WSDL文件时,我们可以利用CXF来创建客户端代理类,这些代理类可以让我们像调用本地方法一样调用远程Web服务。 首先,我们需要将WSDL文件引入到CXF项目中。这通常涉及到以下步骤: 1. 引入CXF库:...

    webservice天气预报例子cxf实例

    在本例中,“webservice天气预报例子cxf实例”指的是使用Apache CXF框架实现的一个天气预报相关的Web服务示例。 Apache CXF是一个开源框架,它为开发和部署Web服务提供了全面的支持。CXF允许开发者通过Java编程模型...

    cxf服务端wsdl发布帮助.docx

    ### CXF服务端WSDL发布及代码生成详解 #### 一、概述 在现代软件开发中,特别是企业级应用开发领域,Web服务扮演着至关重要的角色。CXF(Camel and XFire)作为Apache下的一个开源项目,为开发高质量的Web服务提供...

    cxf webservice简单例子 服务端 客户端

    CXF(CXF: Composite eXtensible Framework)是一个开源的Java框架,它提供了一种在Java应用程序中创建和消费Web服务的方式。本教程将基于CXF构建一个简单的Web服务,包括服务端和客户端的实现。我们将使用CXF提供的...

    利用CXF的wsdl2java来建立Web Service.

    当你有一个WSDL文件时,你可以使用CXF的`wsdl2java`命令行工具将其转换为Java代码,这样你就可以在Java环境中实现或调用这个Web服务。 以下是使用`wsdl2java`的基本步骤: 1. **安装CXF**: 首先,你需要在你的开发...

    apache cxf 一个helloworld的例子

    这是一个简单的例子,仅定义了一个方法`sayHi`,该方法接受一个字符串参数并返回一个字符串。 ```java package org.yifeng.service; public interface HelloWorldService { String sayHi(String text); } ``` ##...

Global site tag (gtag.js) - Google Analytics