cxf学习用wsdl创建接口的使用

来源:互联网 发布:qq飞车穿梭者数据 编辑:程序博客网 时间:2024/06/07 00:21

先得到一个服务器端发布的wsdl文件,解析创建一个接口,然后通过该接口以及wsdl中的发布的地址创建客户端,在调用接口的方法即可调用服务器上的方法。

1、先在自己的机子上简单的发布一个服务。

webservice的类

package com.gg.webservice.cxf.server;


import javax.jws.WebService;


@WebService
public class HelloWorldService{


public String sayHello(@WebParam(name="userName")String userName) {
return "Hello,"+userName;
}

}

2、发布服务的类

package com.gg.webservice.cxf.server;


import javax.xml.ws.Endpoint;


public class Service {


public static void main(String[] args) {
System.out.println("Starting Server");  
HelloWorldServiceI helloWorldService = new HelloWorldService();  
        String address = "http://localhost:9999/helloWorldService";  
        Endpoint.publish(address, helloWorldServicel);  
        System.out.println("Start success");  
}
}

运行发布类之后访问http://localhost:9999/helloWorldService?wsdl即可看到自己发布的服务的wsdl了,接下来就可以根据该wsdl来自己创建接口来建个客户端来访问服务器了。


xs:element中可以看到它提供的接口函数有一个有返回值的sayHello()

<xs:complexType name="sayHello">中可以得到 参数列表,在此例子中sayHello函数有一个String类型的参数。

<xs:complexType name="sayHelloResponse">中可以知道sayHello有一个String类型的返回值。

接下来我们就可以建一个含有该方法的接口;

1、接口类

package com.gg.webservice.cxf.client;


import javax.jws.WebParam;
import javax.jws.WebService;




@WebService
public interface Hello {
public String sayHello(@WebParam(name="userName") String userName);
}

2、连接服务器的类

package com.gg.webservice.cxf.client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;  
public class Client {  

    public static void main(String[] args) throws Exception {  

    /**根据wsdl建一个接口来调用创建service**/
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
     factory.setServiceClass(Hello.class);
     factory.setAddress("http://localhost:9999/helloWorldService"); 
     Hello service = (Hello) factory.create();
     System.out.println(service.toString());
     System.out.println(service.sayHello("gg"));
}  

其中factory.setAddress("http://localhost:9999/helloWorldService"); 从wsdl中<soap:address location="http://localhost:9999/helloWorldService"/>可以得到.


出现的错误:

他妈的这个错误害我花了一个上午的时间才找到原因。

原因:包名弄错了,程序找不到wsdl的对应的service

解决方法:把Hello接口的包名改为package com.gg.webservice.cxf.server;

总结:在创建接口时主要其包名要是wsdl中targetNamespace="http://server.cxf.webservice.gg.com/">中对应的包名。


0 0
原创粉丝点击