java开发webservice几种方式小结

来源:互联网 发布:知彼而知己是什么意思 编辑:程序博客网 时间:2024/06/07 19:55

1.利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务

第一步.新建一个web项目,编写一个POJO.

package com.handkoo.webservice.service01;import javax.jws.WebMethod;import javax.jws.WebService;import javax.xml.ws.Endpoint;@WebServicepublic class Hello {@WebMethodpublic String sayHello(String name){return "hello,"+name+"!";}public static void main(String[] args){Hello hello = new Hello();    Endpoint endpoint = Endpoint.publish("http://192.168.3.187:4222/hello",hello);}}
编写完成后,运行该类.

第二步,在浏览器中查看服务是否发布成功,在浏览器中输入:http://192.168.3.187:4222/hello?wsdl

第三步,利用wsimport命令生成客户端代码:wsimport -keep http://192.168.3.187:4222/hello?wsdl

第四步:测试调用webservice

/** * 使用java自带的方式调用webservice */@Testpublic void testDemo01(){HelloService helloService = new HelloService();Hello hello = helloService.getHelloPort();System.out.println(hello.sayHello("小鹏要逆袭"));}

2.利用xfire框架开发webservice

第一步,准备开发环境,下载所有的xfire包,新建一个web项目,将jar包复制到WEB-INF的lib文件夹下,同时配置web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><display-name>WebServiceClient</display-name><servlet><servlet-name>XFireServlet</servlet-name><servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class><load-on-startup>0</load-on-startup></servlet> <servlet-mapping><servlet-name>XFireServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list></web-app>

第二步,开始编写POJO类对外提供接口

package com.handkoo.webservice.service02;public interface HelloService {String helloExample(String name);}

第三步,编写接口的实现类

package com.handkoo.webservice.service02;public class HelloServiceImpl implements HelloService {@Overridepublic String helloExample(String name) {return "来自java的问候:你好"+name;}}

第四步,在src文件加下新建META-INF文件夹xfire,新建service.xml文件

service.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://xfire.codehaus.org/config/1.0"><service><name>HelloWebService</name><serviceClass>com.handkoo.webservice.service02.HelloService</serviceClass><implementationClass>com.handkoo.webservice.service02.HelloServiceImpl</implementationClass> </service></beans>

第五步,启动tomcat,在浏览器中输入地址http://lcoalhost:8888/WebServiceDemo/services/HelloWebService?wsdl,看到如下页面说明已经发布webservice成功。

第六步,下面开始编写客户端进行测试,使用xfire调用webservice,需要引用的jar包有:

第七步,编写测试代码调用之前发布的webservice:

这里调用有两种方式:

方式1:

/** * xfire的方式调用-方式一 */@Testpublic void testDemo02(){try {Client client = new Client(new URL("http://localhost:8888/WebServiceDemo/services/HelloWebService?wsdl"));Object[] result = client.invoke("helloExample", new Object[]{"小鹏要逆袭"});System.out.println(result[0]);} catch (Exception e) {e.printStackTrace();}}

方式2:

需要把webservice刚刚开发的接口拷贝过来(HelloService):

@Testpublic void testDemo03() throws MalformedURLException{ String serviceURL = "http://localhost:8888/WebServiceDemo/services/HelloWebService?wsdl"; Service serviceModel = new ObjectServiceFactory() .create(com.handkoo.webservice.service02.HelloService.class,null,serviceURL,null); XFireProxyFactory serviceFactory = new XFireProxyFactory(); com.handkoo.webservice.service02.HelloService helloService =  (com.handkoo.webservice.service02.HelloService) serviceFactory.create(serviceModel,"http://localhost:8888/WebServiceDemo/services/HelloWebService"); System.out.println(helloService.helloExample("xzit")); }

运行结果:

3.使用Axis2开发webservice简单实例

第一步,下载axis2的war包,放到tomcat中,在浏览器中访问:

第二步,新建一个web项目,把tomcat里面的axis工程里面的WEB-INF下的conf modules 和services拷贝到新建的工程的WEB-INF里面:

同时把lib文件里面的jar也一并拷贝过去

第二步,配置web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  <display-name>Axis2Demo</display-name>    <servlet>  <servlet-name>AxisServletservlet</servlet-name>  <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>  <load-on-startup>1</load-on-startup>  </servlet>    <servlet-mapping>  <servlet-name>AxisServletservlet</servlet-name>  <url-pattern>/services/*</url-pattern>  </servlet-mapping>    <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list></web-app>

第三步,编写服务类:

package com.handkoo.service;public class HelloWorld {public String getHello(String name){return "hello"+name+".";}public String getWorld(String name){return "world,"+name+".";}public String getHelloWorld(){return "hello world";}}

第四步,在WEB-INF/services 的文件加下新建HelloWorld/META-INF/文件夹,并新建service.xml配置文件:

services.xml配置:

<?xml version="1.0" encoding="UTF-8"?><serviceGroup><service name="HelloWorld"><description>hello world webservice</description><parameter name="ServiceClass">com.handkoo.service.HelloWorld</parameter><operation name="getHello"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"></messageReceiver></operation><operation name="getWorld"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"></messageReceiver></operation><operation name="getHelloWorld"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"></messageReceiver></operation></service></serviceGroup>

第五步,启动tomcat服务,在浏览器中查看是否发布成功:

第六步,编写测试类:

package com.handkoo.test;import javax.xml.namespace.QName;import org.apache.axis2.AxisFault;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.rpc.client.RPCServiceClient;import org.junit.Test; public class TestWebService {@Testpublic void testAxis(){try {// 使用RPC方式调用webserviceRPCServiceClient serviceClient = new RPCServiceClient();Options options = serviceClient.getOptions();// 指定调用webservice的urlEndpointReference targetEPR = new EndpointReference("http://localhost:8888/Axis2Demo/services/HelloWorld");options.setTo(targetEPR); /*** 下面是设置调用webservice的命名空间和方法名(opAddEntry),以及设置方法的返回类型(opAddEntryArgs) ***/// 在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是<wsdl:definitions>元素的targetNamespace属性值  // 指定要调用的getWorld方法及WSDL文件的命名空间.....  QName opAddEntry = new QName("http://service.handkoo.com","getWorld");// 指定getGreeting方法的参数值,如果有多个,继续往后面增加即可,不用指定参数的名称Object[] opAddEntryArgs = new Object[]{"xiaopeng"};// 返回参数类型,这个和axis1有点区别  // invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;  // 第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];  // 第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。  // 当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}  // 如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,  // 该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同  // 指定getGreeting方法返回值的数据类型的Class对象.....Class[] classes = new Class[]{String.class};String result = (String) serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0];System.out.println("getWorld:"+result);opAddEntry = new QName("http://service.handkoo.com", "getHello");opAddEntryArgs = new Object[]{"小鹏要逆袭"};System.out.println("getHelloWorld:"+serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs,classes)[0]);opAddEntry = new QName("http://service.handkoo.com", "getHelloWorld");System.out.println("getHello:"+serviceClient.invokeBlocking(opAddEntry, new Object[]{},classes)[0]);} catch (AxisFault e) {e.printStackTrace();}}}

运行结果:


0 0
原创粉丝点击