先去Apache下载cxf的最新jar包 本人的是 2.3.0
将所有jar加载到类路径下
然后:
----------------------------------------------------------------------
定义一个接口
- package com.cxf.service.iface;
-
- import javax.jws.WebParam;
- import javax.jws.WebService;
-
- @WebService
- public interface Helloworld {
- public String sayHello(@WebParam(name="text") String text);
- }
定义一个实现
- package com.cxf.service.impl;
-
- import javax.jws.WebService;
-
- import com.cxf.service.iface.Helloworld;
-
- @WebService(serviceName="Helloworld")
- public class HelloworldImpl implements Helloworld {
-
- public String sayHello(String text) {
- return "hello " + text;
- }
-
- }
第三步: 发布web service 服务
- package com.cxf.service.app;
-
- import javax.xml.ws.Endpoint;
-
- import com.cxf.service.impl.HelloworldImpl;
-
- public class HelloworldService {
-
-
-
-
- public static void main(String[] args) {
- HelloworldImpl implementor = new HelloworldImpl();
- String address = "http://localhost:9000/MyService";
- Endpoint.publish(address, implementor);
- System.out.println("服务已经发布....");
- }
-
- }
打开浏览器 输入http://localhost:9000/MyService?wsdl
- <?xml version="1.0" encoding="UTF-8" ?>
- - <wsdl:definitions name="Helloworld" targetNamespace="http://impl.service.cxf.com/" xmlns:ns1="http://iface.service.cxf.com/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://impl.service.cxf.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:import location="http://localhost:9000/MyService?wsdl=Helloworld.wsdl" namespace="http://iface.service.cxf.com/" />
- - <wsdl:binding name="HelloworldSoapBinding" type="ns1:Helloworld">
- <soap:binding style="document" mce_style="document" transport="http://schemas.xmlsoap.org/soap/http" />
- - <wsdl:operation name="sayHello">
- <soap:operation soapAction="" style="document" mce_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="Helloworld">
- - <wsdl:port binding="tns:HelloworldSoapBinding" name="HelloworldImplPort">
- <soap:address location="http://localhost:9000/MyService" />
- </wsdl:port>
- </wsdl:service>
- </wsdl:definitions>
抓取有用的信息。。。。
wsdl:definitions name="Helloworld".....
<wsdl:import location="http://localhost:9000/MyService?wsdl=Helloworld.wsdl"namespace="http://iface.service.cxf.com/" />
targetNamespace="http://impl.service.cxf.com/
客户端调用
- package com.cxf.client;
-
- import javax.xml.namespace.QName;
- import javax.xml.ws.Service;
- import javax.xml.ws.soap.SOAPBinding;
-
- import com.cxf.service.iface.Helloworld;
-
- public class HelloworldClient {
-
- private static String namespaceURI = "http://iface.service.cxf.com/";
- private static QName SERVICE_NAME = new QName(namespaceURI, "Helloworld");
- private static QName PORT_NAME = new QName(namespaceURI,"HelloworldPort");
-
-
-
- public static void main(String[] args) {
- Service service = Service.create(SERVICE_NAME);
- String endpointAddress = "http://localhost:9000/MyService";
- service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
- Helloworld hw = service.getPort(Helloworld.class);
- String info = hw.sayHello("涛哥");
- System.out.println(info);
- }
-
- }
注意几点:
1:namespaceURI指的是targetNamespace!
2:PORT_NAME 的第二个参数 是 服务名 + port
而不是<wsdl:port binding="tns:HelloworldSoapBinding" name="HelloworldImplPort">
中的 HelloworldImplPort 这点不是很懂。 先记着就ok
3: 如果namespaceURI SERVICE_NAME PORT_NAME 配置错误, 将会抛出一个
Invalid address. Endpoint address cannot be null.
另外 namespaceURI 末尾有一个反斜杠 /
4:endpointAddress 区分大小写 。 否则将会抛出一个404