CXF WebService (一)

  CXF是一个开源的WebService框架,首先通过一个简单的示例学习CXF的使用

   @WebService 注解有多个属性,通过对这些属性的赋值去学习各个属性的作用。

     name: 指定服务接口的名称。此属性映射到wsdl:portType元素的属性名称,默认值是实现类的类名。

     targetNamespace 指定服务的命名空间,如果该属性未指定则命名空间来自包名。

    serviceName :值发布的服务名称,次属性映射到wsdl:service元素的名称。默认值是实现类的名称实现类的名称+Service

    portName:指定服务发布点的名称。此属性映射到wsdl:port

    wsdlLocation:指定WSDL协议保存的URI。该属性默认值为服务部署的URI

    endpointInterface: 指定实现类中服务接口的全名。

 

/**
 * CXF 第一个示例
 * @author zhangwei
 * @version $Id: HelloWord.java, v 0.1 2014年9月27日 上午8:28:08 zhangwei Exp $
 */
public interface HelloWord {
    /**
     * 示例方法,打印“Hello,Word”
     */
    public void sayHello();
}
/**
 *@SOAPBinding(style = SOAPBinding.Style.RPC)
 * @author zhangwei_david
 * @version $Id: HelloWordImpl.java, v 0.1 2014年9月27日 上午8:32:20 zhangwei_david Exp $
 */

@WebService
public class HelloWordImpl implements HelloWord {

    /**
     * @see com.cathy.demo.cxf.HelloWord#sayHello()
     */
    @WebMethod
    public void sayHello() {
        LoggerUtils.info("Hello,Word");
    }

}

 

/**
 *
 * @author zhangwei_david
 * @version $Id: SimpleServer.java, v 0.1 2014年9月27日 上午8:36:45 zhangwei_david Exp $
 */
public class SimpleServer {

    public SimpleServer() {
        init();
    }

    private void init() {
        LoggerUtils.info("启动服务。。。");
        HelloWord helloWord = new HelloWordImpl();
        String address = "http://localhost:9000/HelloWord";
        Endpoint.publish(address, helloWord);
    }

    public static void main(String[] args) throws Exception {
        new SimpleServer();
        LoggerUtils.info("服务就绪。。。。");
        TimeUnit.MINUTES.sleep(10);
        LoggerUtils.info("关闭服务。。。。");
        System.exit(0);
    }

}

 

 

浏览器中输入:http://localhost:9000/HelloWord?wsdl

 

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

-<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.cxf.demo.cathy.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" targetNamespace="http://impl.cxf.demo.cathy.com/" name="HelloWordImplService">


-<wsdl:types>


-<xs:schema xmlns:tns="http://impl.cxf.demo.cathy.com/" targetNamespace="http://impl.cxf.demo.cathy.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" elementFormDefault="unqualified">

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

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


-<xs:complexType name="sayHello">

<xs:sequence/>

</xs:complexType>


-<xs:complexType name="sayHelloResponse">

<xs:sequence/>

</xs:complexType>

</xs:schema>

</wsdl:types>


-<wsdl:message name="sayHelloResponse">

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

</wsdl:message>


-<wsdl:message name="sayHello">

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

</wsdl:message>


-<wsdl:portType name="HelloWordImpl">


-<wsdl:operation name="sayHello">

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

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

</wsdl:operation>

</wsdl:portType>


-<wsdl:binding name="HelloWordImplServiceSoapBinding" type="tns:HelloWordImpl">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>


-<wsdl:operation name="sayHello">

<soap:operation style="document" soapAction=""/>


-<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="HelloWordImplService">


-<wsdl:port name="HelloWordImplPort" binding="tns:HelloWordImplServiceSoapBinding">

<soap:address location="http://localhost:9000/HelloWord"/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>

  

 

将实现类修改为:

/**
 *
 * @author zhangwei_david
 * @version $Id: HelloWordImpl.java, v 0.1 2014年9月27日 上午8:32:20 zhangwei_david Exp $
 */
@WebService(name = "HelloWord", portName = "HelloPort", serviceName = "HelloWordService", targetNamespace = "http://com.cathy.demo")
public class HelloWordImpl implements HelloWord {

    /**
     * @see com.cathy.demo.cxf.HelloWord#sayHello()
     */
    @WebMethod
    public void sayHello() {
        LoggerUtils.info("Hello,Word");
    }

}

 

 

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

-<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://com.cathy.demo" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" targetNamespace="http://com.cathy.demo" name="HelloWordService">


-<wsdl:types>


-<xs:schema xmlns:tns="http://com.cathy.demo" targetNamespace="http://com.cathy.demo" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" elementFormDefault="unqualified">

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

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


-<xs:complexType name="sayHello">

<xs:sequence/>

</xs:complexType>


-<xs:complexType name="sayHelloResponse">

<xs:sequence/>

</xs:complexType>

</xs:schema>

</wsdl:types>


-<wsdl:message name="sayHelloResponse">

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

</wsdl:message>


-<wsdl:message name="sayHello">

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

</wsdl:message>


-<wsdl:portType name="HelloWord">


-<wsdl:operation name="sayHello">

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

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

</wsdl:operation>

</wsdl:portType>


-<wsdl:binding name="HelloWordServiceSoapBinding" type="tns:HelloWord">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>


-<wsdl:operation name="sayHello">

<soap:operation style="document" soapAction=""/>


-<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="HelloWordService">


-<wsdl:port name="HelloPort" binding="tns:HelloWordServiceSoapBinding">

<soap:address location="http://localhost:9000/HelloWord"/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>

 

可以发现上面的SOAP的方式都一直地document 如果想改为RPC又该如何呢?

 

**
 *
 * @author zhangwei_david
 * @version $Id: HelloWordImpl.java, v 0.1 2014年9月27日 上午8:32:20 zhangwei_david Exp $
 */
@SOAPBinding(style = SOAPBinding.Style.RPC)
@WebService
public class HelloWordImpl implements HelloWord {

    /**
     * @see com.cathy.demo.cxf.HelloWord#sayHello()
     */
    @WebMethod
    public void sayHello() {
        LoggerUtils.info("Hello,Word");
    }

}

 

 

 

结果可以看到WSDL是:

 

 

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

-<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.cxf.demo.cathy.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" targetNamespace="http://impl.cxf.demo.cathy.com/" name="HelloWordImplService">

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

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


-<wsdl:portType name="HelloWordImpl">


-<wsdl:operation name="sayHello">

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

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

</wsdl:operation>

</wsdl:portType>


-<wsdl:binding name="HelloWordImplServiceSoapBinding" type="tns:HelloWordImpl">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>


-<wsdl:operation name="sayHello">

<soap:operation style="rpc" soapAction=""/>


-<wsdl:input name="sayHello">

<soap:body namespace="http://impl.cxf.demo.cathy.com/" use="literal"/>

</wsdl:input>


-<wsdl:output name="sayHelloResponse">

<soap:body namespace="http://impl.cxf.demo.cathy.com/" use="literal"/>

</wsdl:output>

</wsdl:operation>

</wsdl:binding>


-<wsdl:service name="HelloWordImplService">


-<wsdl:port name="HelloWordImplPort" binding="tns:HelloWordImplServiceSoapBinding">

<soap:address location="http://localhost:9000/HelloWord"/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>

 

 

你可能感兴趣的:(CXF WebService (一))