微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用CXF发布和调用webservice之HelloWorld入门

 依赖的JAR
    cxf-2.2.10.jar
    jetty-6.1.21.jar
    jetty-util-6.1.21.jar
    servlet-2_5-api.jar
    wsdl4j-1.6.2.jar
    XmlSchema-1.4.5.jar
创建一个普通的Java工程即可

创建webservice接口

package com.cxf.interfaces;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface HelloWorldServiceInf {
    String sayHello(@WebParam(name="username") String username);
}

发布和调用webservice
方法
   发布webservice

package com.cxf.impl;

import javax.jws.WebService;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerfactorybean;

import com.cxf.interfaces.HelloWorldServiceInf;

@WebService(endpointInterface="com.cxf.interfaces.HelloWorldServiceInf",serviceName="helloWorldService")
public class Server implements HelloWorldServiceInf {

    public String sayHello(String username) {
        return "Hello,"+username;
    }

    
    public static void main(String[] args) {
        Server impl=new Server();
        JaxWsServerfactorybean factorybean=new JaxWsServerfactorybean();
        factorybean.setAddress("http://localhost:9000/hello");
        factorybean.setServiceClass(HelloWorldServiceInf.class);
        factorybean.setServiceBean(impl);
        factorybean.getininterceptors().add(new LoggingInInterceptor());
        factorybean.getoutInterceptors().add(new LoggingOutInterceptor());
        factorybean.create();
    }
    
}

wsdl描述文件

 <?xml version="1.0" ?> 
- <wsdl:deFinitions name="HelloWorldServiceInfService" targetNamespace="http://interfaces.cxf.com/" xmlns:ns1="http://schemas.xmlsoap.org/wsdl/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://interfaces.cxf.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:types>
- <xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://interfaces.cxf.com/" xmlns:tns="http://interfaces.cxf.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="sayHello" type="tns:sayHello" /> 
- <xsd:complexType name="sayHello">
- <xsd:sequence>
  <xsd:element minOccurs="0" name="username" type="xsd:string" /> 
  </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="sayHelloResponse" type="tns:sayHelloResponse" /> 
- <xsd:complexType name="sayHelloResponse">
- <xsd:sequence>
  <xsd:element minOccurs="0" name="return" type="xsd:string" /> 
  </xsd:sequence>
  </xsd:complexType>
  </xsd:schema>
  </wsdl:types>
- <wsdl:message name="sayHelloResponse">
  <wsdl:part element="tns:sayHelloResponse" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="sayHello">
  <wsdl:part element="tns:sayHello" name="parameters" /> 
  </wsdl:message>
- <wsdl:portType name="HelloWorldServiceInf">
- <wsdl:operation name="sayHello">
  <wsdl:input message="tns:sayHello" name="sayHello" /> 
  <wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse" /> 
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="HelloWorldServiceInfServiceSoapBinding" type="tns:HelloWorldServiceInf">
  <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="HelloWorldServiceInfService">
- <wsdl:port binding="tns:HelloWorldServiceInfServiceSoapBinding" name="HelloWorldServiceInfPort">
  <soap:address location="http://localhost:9000/hello" /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:deFinitions>

客户端调用

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.HelloWorldServiceInf;

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(HelloWorldServiceInf.class);
        factorybean.setAddress("http://localhost:9000/hello");
        HelloWorldServiceInf impl=(HelloWorldServiceInf) factorybean.create();
        System.out.println(impl.sayHello("张三"));
    }
}

方法
  发布webservice

package com.cxf.impl;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

import com.cxf.interfaces.HelloWorldServiceInf;

@WebService(endpointInterface="com.cxf.interfaces.HelloWorldServiceInf","+username;
    }
    public static void main(String[] args) {
        Server impl=new Server();
        String address="http://localhost:9000/hello";
        Endpoint.publish(address,impl);
    }
}

wsdl文件

<?xml version="1.0" ?> 
<wsdl:deFinitions name="helloWorldService" targetNamespace="http://impl.cxf.com/" xmlns:ns1="http://interfaces.cxf.com/" xmlns:ns2="http://schemas.xmlsoap.org/wsdl/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://impl.cxf.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:import location="http://localhost:9000/hello?wsdl=HelloWorldServiceInf.wsdl" namespace="http://interfaces.cxf.com/" /> 
 <wsdl:binding name="helloWorldServiceSoapBinding" type="ns1:HelloWorldServiceInf">
  <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="helloWorldService">
 <wsdl:port binding="tns:helloWorldServiceSoapBinding" name="ServerPort">
  <soap:address location="http://localhost:9000/hello" /> 
  </wsdl:port>
  </wsdl:service>
</wsdl:deFinitions>

客户端调用

package com.cxf.client;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.soap.soAPBinding;

import com.cxf.interfaces.HelloWorldServiceInf;

public class Client {
    //注意:此处http://interfaces.cxf.com/  来源于wsdl文件中namespace   <wsdl:import location="http://localhost:9000/hello?wsdl=HelloWorldServiceInf.wsdl" namespace="http://interfaces.cxf.com/" /> 

    private static final QName SERVICE_NAME=new QName("http://interfaces.cxf.com/","HelloWorldServiceInf");//HelloWorldServiceInf接口类的名称
    private static final QName PORT_NAME=new QName("http://interfaces.cxf.com/","HelloWorldServiceInfPort");//HelloWorldServiceInfPort 接口类的名称+Port
    public static void main(String[] args) {
        String endPointAddress="http://localhost:9000/hello";
        Service service=Service.create(SERVICE_NAME);
        service.addPort(PORT_NAME,SOAPBinding.soAP11HTTP_BINDING,endPointAddress);
        HelloWorldServiceInf inf=service.getPort(HelloWorldServiceInf.class);
        System.out.println(inf.sayHello("张三"));
    }
}

CXF根据wsdl文件动态调用WebService

package com.cxf.client;

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

public class ClientFromWsdl {
    
    public static void main(String[] args) throws Exception{
        JaxWsDynamicclientFactory dcf = JaxWsDynamicclientFactory.newInstance();
        org.apache.cxf.endpoint.Client client = dcf.createClient("http://localhost:9000/hello?wsdl");
        //sayHello 为接口中定义的方法名称   张三为传递的参数   返回一个Object数组
        Object[] objects=client.invoke("sayHello","张三"); 
        //输出调用结果
        System.out.println(objects[0].toString());
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐