前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中WebService实例

Java中WebService实例

作者头像
全栈程序员站长
发布2022-09-13 21:31:49
5760
发布2022-09-13 21:31:49
举报

大家好,又见面了,我是你们的朋友全栈君。

Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。

Web Service的关键技术和规则:

1.XML:描述数据的标准方法.

2.SOAP:表示信息交换的协议(简单对象访问协议).

3.WSDL:Web服务描述语言.

4.UDDI:通用描述、发现与集成,他是一种独立于平台,基于XML语言的用于在互联网上描述商务的协议。

一、利用JDK web服务api实现,这里使用基于SOAP message的Web Service:

1.首先创建一个Web Services项目,作为Web services Endpoint.

2.创建一个HelloService.java类

package com.yjpeng.hello;</p> <p>import javax.jws.WebService;<br />import javax.jws.WebMethod;<br />import javax.xml.ws.Endpoint;</p> <p>@WebService<br />public class HelloService {</p> <p> @WebMethod<br /> public String sayHello(String message){<br /> return “Hello ,” + message;<br /> }</p> <p> public static void main(String[] args) {<br /> //create and publish an endPoint<br /> HelloService hello = new HelloService();<br /> Endpoint endPoint = Endpoint.publish(“http://localhost:8080/helloService”, hello);<br /> }<br />}<br />

3.使用apt编译HelloService.java(例如: apt -d bin(bin存放编译后的文件目录) scr/com/yjpeng/hello/HelloService.java)后,会生成jaxws目录。

4.使用java com.yjpeng.hello.HelloService执行HelloService.java文件,在浏览器中输入http://localhost:8080/helloService?wsdl出现如下图

Java中WebService实例
Java中WebService实例

5.使用wsimport命令生成客户端:wsimport -p com.yjpeng.webservice -keep http://localhost:8080/helloService?wsdl 这时会在当前目录中生成如下文件:

Java中WebService实例
Java中WebService实例

6.编写好客户端文件HelloClient.java

package com.yjpeng.hello;</p> <p>import com.yjpeng.webservice.HelloServiceService;</p> <p>public class HelloClient {<br /> public static void main(String[] args) {<br /> HelloServiceService helloServiceService = new HelloServiceService();<br /> com.yjpeng.webservice.HelloService helloService = helloServiceService.getHelloServicePort();<br /> System.out.println(helloService.sayHello(“你好”));<br /> }</p> <p>}

运行结果在控制台输出 hello,你好 证明利用JDK web服务API实现web service成功!

二、使用xfire框架,我这里使用的是MyEclipse集成的xfire进行测试,利用xfire开发WebService可以有三种方法:

a.一种是从JavaBean中生成。

b.一种是从wsdl文件中生成。

c.一种是自己建立webservice。

具体实现步骤如下:

1.用Myeclipse建立webService工程(注意:Web Service&J2EE Details中的Framework选XFire),目录结构如下:

Java中WebService实例
Java中WebService实例

2.创建IHello.java接口

package com.yjpeng.hello;</p> <p>public interface IHello {<br /> public String sayHello(String message);<br />}<br />

3.创建IHelloImpl.java实现IHello.java接口

package com.yjpeng.hello;</p> <p>public class IHelloImpl implements IHello {</p> <p> public String sayHello(String message) {<br /> return message;<br /> }<br />}

4.修改Service.xml文件,加入以下代码

<service> <!– 为该Service起一个名字 –> <name>HelloService</name> <!– service的接口类 –> <serviceClass> com.yjpeng.hello.IHello </serviceClass> <!– service的接口实现类–> <implementationClass> com.yjpeng.hello.IHelloImpl </implementationClass> <!– wsdl的样式–> <style>wrapped</style> <use>literal</use> <scope>application</scope> </service>

5.把该Web Service项目部署到tomcat里面启动tomcat在浏览器地址栏输入http://localhost:8080/TestWebServices/services/Hello?wsdl 出现如下图

Java中WebService实例
Java中WebService实例

6.然后在展开HelloService后面的wsdl可以看到

Java中WebService实例
Java中WebService实例

7.创建一个客户端HelloClient.java类

import java.net.MalformedURLException;<br />import java.net.URL;</p> <p>import org.codehaus.xfire.XFireFactory;<br />import org.codehaus.xfire.client.Client;<br />import org.codehaus.xfire.client.XFireProxyFactory;<br />import org.codehaus.xfire.service.Service;<br />import org.codehaus.xfire.service.binding.ObjectServiceFactory;</p> <p>import com.yjpeng.hello.IHello;</p> <p>public class HelloClient {<br /> public static void main(String[] args) {<br /> Service s = new ObjectServiceFactory().create(IHello.class);<br /> XFireProxyFactory xf = new XFireProxyFactory(XFireFactory.newInstance().getXFire());<br /> String url=”http://192.168.122.128:8080/TestWebServices/services/HelloService”;<br /> IHello hello;<br /> try {<br /> hello = (IHello)xf.create(s, url);<br /> System.out.println(hello.sayHello(“你好”));<br /> } catch (MalformedURLException e) {<br /> e.printStackTrace();<br /> }<br /> try {<br /> //这个是在java端调用.net写的远程Web Service 如果调用本机写的只需要把URL中的地址换成本机能访问的地址即可<br /> Client c = new Client(new URL(“http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl”));<br /> Object[] o = c.invoke(“qqCheckOnline”, new String[]{“271751507”});<br /> System.out.println(o.length);<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> }<br /> }<br />}

运行HelloClient.java类可以输出 你好 1.

三、使用axis1.4开发webservice方法

首先下载axis1.4包和tomcat服务器,并将解压后的axis1.4包下面的webapps下的axis目录复制到tomcat服务器的webapps文件夹中。axis支持三种Web Service的部署和开发,分别为:

a.Dynamic Invocation Interface(DII)

b.Stubs 方式

c.Dynamic Proxy方式

1.编写DII(Dynamic Invocation Interface)方式Web Service

a.编写服务程序HelloClient.java

public class HelloClient<br />{<br /> public String getName(String name){<br /> return “hello,” + name;<br /> }<br />}

b.将HelloClient.java文件拷贝到axis_home下,重命名为HelloClient.jws.

c.访问链接http://localhost:8080/axis/HelloClient.jws?wsdl页面显示axis自动生成的wsdl文件

d.编写访问服务的客户端TestHelloClient.java需要导入相应的axis.jar包,在下载的axis的WEB-INF/lib/目录下。

package com.yjpeng.webservice;</p> <p>import java.net.URL;<br />import javax.xml.namespace.QName;<br />import org.apache.axis.client.Call;<br />import org.apache.axis.client.Service;</p> <p>public class TestHelloClient {<br /> public static void main(String[] args){<br /> try{<br /> String endpoint = “http://localhost:8080/axis/HelloClient.jws”;<br /> Service service = new Service();<br /> Call call = (Call)service.createCall();<br /> call.setOperationName(new QName(endpoint, “getName”));<br /> call.setTargetEndpointAddress(new URL(endpoint));<br /> String result = (String) call.invoke(new Object[]{“张三”});<br /> System.out.println(result);<br /> }catch (Exception e) {<br /> e.printStackTrace();<br /> }<br /> }<br />}

运行TestHelloClient.java在控制台输出hell,张三,测试成功.

2.编写Dynamci Proxy方式访问服务

a.编写部署服务端程序,用上边DII方式使用的HelloClient.java

public class HelloClient<br />{<br /> public String getName(String name){<br /> return “hello,” + name;<br /> }<br />}

b.编写代理接口HelloClientInterface.java需要扩展java.rmi.Remote类

package com.yjpeng.dynamic.proxy;</p> <p>import java.rmi.Remote;<br />import java.rmi.RemoteException;</p> <p>public interface HelloClientInterface extends Remote {<br /> public String getName(String name) throws RemoteException;<br />}<br />

c.编写访问服务的客户端TestHelloClient.java

package com.yjpeng.dynamic.proxy;</p> <p>import java.net.URL;</p> <p>import javax.xml.namespace.QName;<br />import javax.xml.rpc.Service;<br />import javax.xml.rpc.ServiceFactory;</p> <p>public class TestHelloClient {<br /> public static void main(String[] args){<br /> try{<br /> String wsdlUrl = “http://localhost:8080/axis/HelloClient.jws?wsdl”;<br /> String nameSpaceUrl = “http://localhost:8080/axis/HelloClient.jws”;<br /> String serviceName = “HelloClientService”;<br /> String portName = “HelloClient”;<br /> ServiceFactory serviceFactory = ServiceFactory.newInstance();<br /> Service afService = serviceFactory.createService(new URL(wsdlUrl), new QName(nameSpaceUrl, serviceName));<br /> HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(nameSpaceUrl, portName),<br /> HelloClientInterface.class);<br /> System.out.println(proxy.getName(“张三”));<br /> }catch (Exception e) {<br /> e.printStackTrace();<br /> }<br /> }<br />}

运行TestHelloClient.java在控制台输出hell,张三,测试成功.

四、使用axis2开发webservice

研究中….

五、在java web项目中开放一个webservice接口实例

1.引入需要的jar包

2.创建一个接口类IAddNumbers.java

package com.yjpeng.webservice;</p> <p>public interface IAddNumbers {<br /> public int addNumbers(int a, int b);<br />}

3.创建一个AddNumberImpl.java实现IAddnumbers.java接口类

package com.yjpeng.webservice;</p> <p>import javax.jws.WebService;</p> <p>import com.sun.xml.ws.transport.http.servlet.WSServlet;</p> <p>@WebService(targetNamespace=”http://webservice.yjpeng.com”, serviceName=”AddNumberImplService”,<br /> portName=”AddNumberImpl”)<br />public class AddNumberImpl implements IAddNumbers {<br /> public int addNumbers(int a, int b) {<br /> return a + b;<br /> }<br />}

4.在WEN-INF目录下创建一个sun-jaxws.xml文件

<?xml version=”1.0″?><br /><endpoints version=”2.0″<br /> xmlns=”http://java.sun.com/xml/ns/jax-ws/ri/runtime”><br /> <endpoint name=”AddNumberImpl”<br /> implementation=”com.yjpeng.webservice.AddNumberImpl”<br /> url-pattern=”/addNumberImpl”/><br /> </endpoints><br />

5.在web.xml文件中增加

<servlet><br /> <servlet-name>AddNumberService</servlet-name><br /> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class><br /> <load-on-startup>1</load-on-startup><br /> </servlet><br /> <servlet-mapping><br /> <servlet-name>AddNumberService</servlet-name><br /> <url-pattern>/addNumberImpl</url-pattern><br /> </servlet-mapping><br /> <listener><br /> <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class><br /> </listener>

6.部署web项目 启动相应部署服务器。访问http://localhost:8080/TestJaxWebService/addNumberImpl?wsdl 这样每次启动web服务器就开放了一个web service的接口。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/162628.html原文链接:https://javaforall.cn

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com