wsdl文档结构图

以下是基于cxf 2.13实现的webservice

接口类:

wsdl文档结构图 View Code
package com.cxf213;





import javax.jws.WebParam;

import javax.jws.WebResult;

import javax.jws.WebService;



/** 

 * @Package com.cxf213



 * @ClassName: HelloWorld



 * @Description: TODO(这里用一句话描述这个类的作用)



 * @author andy



 * @date 2013-1-28 下午11:12:52



 */

@WebService

public interface HelloWorld {

    @WebResult(name="sayHelloResult")String sayHello(@WebParam(name="name")String name);

}

实现类:

wsdl文档结构图 View Code
package com.cxf213;





import javax.jws.WebService;



/** 

 * @Package com.cxf213



 * @ClassName: HelloWorldImpl



 * @Description: TODO(这里用一句话描述这个类的作用)



 * @author andy



 * @date 2013-1-28 下午11:16:57



 */

@WebService

public class HelloWorldImpl implements HelloWorld {



    /** (non Javadoc)

    

     * <p>Title: sayHello</p>

    

     * <p>Description: </p>

    

     * @param name

     * @return

    

     * @see com.cxf213.HelloWorld#sayHello(java.lang.String)

     */

    public String sayHello(String name) {

        // TODO Auto-generated method stub

        System.out.println("cxf 2.13 webservice");

        return "hello:" + name;

    }



}

服务器端:

wsdl文档结构图 View Code
package com.cxf213;





import org.apache.cxf.endpoint.Server;

import org.apache.cxf.interceptor.Interceptor;

import org.apache.cxf.interceptor.LoggingInInterceptor;

import org.apache.cxf.interceptor.LoggingOutInterceptor;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;



/** 

 * @Package com.cxf213



 * @ClassName: MainServer



 * @Description: TODO(这里用一句话描述这个类的作用)



 * @author andy



 * @date 2013-1-28 下午11:18:28



 */

public class MainServer {

    public static void main(String[] args) {

            JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();

            //设置webservice的具体实现类

            factory.setServiceClass(HelloWorldImpl.class);

            //设置webservice的地址

            factory.setAddress("http://localhost:8080/HelloWorld");

            

            //添加一个输入的intercepter

            factory.getInInterceptors().add(new LoggingInInterceptor());

            

            //添加一个输出的intercepter

            factory.getOutInterceptors().add(new LoggingOutInterceptor());

            //创建一个webservice

            Server server = factory.create();

            server.start();

    }

}

运行服务器端main方法之后访问:http://localhost:8080/HelloWorld?wsdl

就会有一个xml文档结构图:

wsdl文档结构图 View Code
<!--文档缩写

<wsdl:definitions name="HelloWorldImplService" targetNamespace="http://cxf213.com/">

    <wsdl:types></wsdl:types>

    <wsdl:message name="sayHello"></wsdl:message> 

    <wsdl:message name="sayHelloResponse"></wsdl:message>

    <wsdl:portType name="HelloWorld"></wsdl:portType>

    <wsdl:binding name="HelloWorldImplServiceSoapBinding" type="tns:HelloWorld"></wsdl:binding>

    <wsdl:service name="HelloWorldImplService"></wsdl:service>

</wsdl:definitions>

-->



<?xml version='1.0' encoding='UTF-8'?>

    <!-- name 为实现类+service  targetNamespace为包名倒过来-->

<wsdl:definitions name="HelloWorldImplService"

    targetNamespace="http://cxf213.com/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http"

    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://cxf213.com/"

    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">



    <!-- 参数类型:包括输入参数,和返回值参数 -->

    <wsdl:types>

        <xs:schema attributeFormDefault="unqualified"

            elementFormDefault="unqualified" targetNamespace="http://cxf213.com/"

            xmlns:tns="http://cxf213.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">



            <!-- 输入参数类型 (总计一样的把它定成一个类型) -->

            <xs:element name="sayHello" type="tns:sayHello" />



            <!-- 返回值类型  (总计一样的把它定成一个类型)-->

            <xs:element name="sayHelloResponse" type="tns:sayHelloResponse" />



            <!-- 输入参数的详细情况 -->

            <xs:complexType name="sayHello">

                <xs:sequence>

                    <!-- name为参数的具体名字,type为参数的类型 -->

                    <xs:element minOccurs="0" name="name" type="xs:string" />

                </xs:sequence>

            </xs:complexType>



            <!-- 返回值类型的详细情况 -->

            <xs:complexType name="sayHelloResponse">

                <xs:sequence>

                    <!-- name为参数的具体名字,type为参数的类型 -->

                    <xs:element minOccurs="0" name="sayHelloResult" type="xs:string" />

                </xs:sequence>

            </xs:complexType>

        </xs:schema>

    </wsdl:types>



    <!-- 把请求包装成一个message -->

    <wsdl:message name="sayHello">

        <wsdl:part element="tns:sayHello" name="parameters">

        </wsdl:part>

    </wsdl:message>



    <!-- 把输出响应包装成一个message -->

    <wsdl:message name="sayHelloResponse">

        <wsdl:part element="tns:sayHelloResponse" name="parameters">

        </wsdl:part>

    </wsdl:message>



    <!-- 对应我们的接口 -->

    <wsdl:portType name="HelloWorld">

        <!-- 接口里面暴露出来的方法 -->

        <wsdl:operation name="sayHello">

            <!-- 这里面的message参数对应上面的message,下同 -->

            <wsdl:input message="tns:sayHello" name="sayHello">

            </wsdl:input>

            <wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse">

            </wsdl:output>

        </wsdl:operation>

    </wsdl:portType>



    <!-- 把定义的接口绑定 ,type是需要绑定的接口-->

    <wsdl:binding name="HelloWorldImplServiceSoapBinding" type="tns: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>





   <!-- 发布成webservice -->

    <wsdl:service name="HelloWorldImplService">

        <wsdl:port binding="tns:HelloWorldImplServiceSoapBinding" name="HelloWorldImplPort">

           <!-- 发布成的地址 -->

            <soap:address location="http://localhost:8080/HelloWorld" />

        </wsdl:port>

    </wsdl:service>

    

    

</wsdl:definitions>

 

 

客户端:

wsdl文档结构图 View Code
package com.cxf213;



import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;



/** 

 * @Package com.cxf213



 * @ClassName: HelloWorldClient



 * @Description: TODO(这里用一句话描述这个类的作用)



 * @author andy



 * @date 2013-1-29 上午10:50:16



 */

public class HelloWorldClient {

    public static void main(String[] args) {

        

        JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();

        factoryBean.setAddress("http://localhost:8080/HelloWorld");

        factoryBean.setServiceClass(HelloWorld.class);

        HelloWorld helloWorld = (HelloWorld)factoryBean.create();

        System.out.println(helloWorld.sayHello("张三"));

    }

}



 

 

 

 

 

你可能感兴趣的:(wsdl)