JSP学习笔记(一百零七):使用metro开发webservice
一、下载metro
metro貌似已经整合在jdk1.6里面了,没有试过。我用的是jdk1.5,需要下载支持包,下载地址:https://metro.dev.java.net/2.0-ea/metro-2_0-ea.jar
metro官方地址:https://metro.dev.java.net/
二、布置metro到项目中去
Windows平台下,jar包可以执行,自动解压到metro路径下,我经过尝试,至少需要metro/lib目录下的:
webservices-api.jar
webservices-rt.jar
webservices-extra.jar
这三个包才能使用metro提供webservice服务
三、使用metro编写服务端代码
编写服务类Storck.java
开启服务类:
metro貌似已经整合在jdk1.6里面了,没有试过。我用的是jdk1.5,需要下载支持包,下载地址:https://metro.dev.java.net/2.0-ea/metro-2_0-ea.jar
metro官方地址:https://metro.dev.java.net/
二、布置metro到项目中去
Windows平台下,jar包可以执行,自动解压到metro路径下,我经过尝试,至少需要metro/lib目录下的:
webservices-api.jar
webservices-rt.jar
webservices-extra.jar
这三个包才能使用metro提供webservice服务
三、使用metro编写服务端代码
编写服务类Storck.java
package com.mysite.webservice;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(targetNamespace = "http://tempuri.org/")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class Storck {
@WebMethod
public String Hello(String str)
{
return "Hello," + str;
}
}
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(targetNamespace = "http://tempuri.org/")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class Storck {
@WebMethod
public String Hello(String str)
{
return "Hello," + str;
}
}
开启服务类:
……
javax.xml.ws.Endpoint.publish("http://127.0.0.1:8080/proj1/HelloService", new Storck());
……
javax.xml.ws.Endpoint.publish("http://127.0.0.1:8080/proj1/HelloService", new Storck());
……
运行开启服务的类,就可以使用http://127.0.0.1:8080/proj1/HelloService?wsdl 看到效果了
四、使用metro编写客户端代码
metro\bin目录下提供的有工具wsimport,可以根据wsdl生成相关类
我是这么用的:
wsimport -s c:\hello-client -p com.mysite.client -extension http://127.0.0.1:8080/proj1/HelloService?wsdl
-s c:\hello-client 生成客户端相关类的路径
-p com.mysite.client 生成客户端相关类的包名
-extension 貌似是忽略警告之类的
http://127.0.0.1:8080/proj1/HelloService?wsdl 提供服务的地址
用这个工具会生成两个文件到c:\hello-client:
Storck.java
StorckService.java
然后就是最终的调用了:
StorckService service = new StorckService();
Storck storck = service.getStorckPort();
System.out.println(storck.hello("Tom"));
Storck storck = service.getStorckPort();
System.out.println(storck.hello("Tom"));
运行时,控制台打印结果为:Hello,Tom
五、使用metro编写代码调用.Net WebService
在.net环境编写WebService服务代码WebService1.asmx:
using System.Web.Services;
using System.Web.Services.Protocols;
namespace App3
{
/// <summary>
/// WebService1 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)]
[ToolboxItem(false)]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld(String str)
{
return "Hi," + str;
}
}
}
服务地址为:http://127.0.0.1/app1/WebService1.asmx?wsdlusing System.Web.Services.Protocols;
namespace App3
{
/// <summary>
/// WebService1 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)]
[ToolboxItem(false)]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld(String str)
{
return "Hi," + str;
}
}
}
用wsimport生成相关代码,上面有讲,这里略过,不过不同的是,生成了6个文件:
HelloWorld.java
HelloWorldResponse.java
ObjectFactory.java
package-info.java
WebService1.java
WebService1Soap.java
最终调用代码:
WebService1 service = new WebService1();
WebService1Soap soap = service.getWebService1Soap();
System.out.println(soap.helloWorld("Lily"));
WebService1Soap soap = service.getWebService1Soap();
System.out.println(soap.helloWorld("Lily"));
运行时,控制台打印结果为:Hi,Lily