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
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());
……
运行开启服务的类,就可以使用http://127.0.0.1:8080/proj1/HelloService?wsdl 看到效果了
四、使用metro编写客户端代码
metro\bin目录下提供的有工具wsimport,可以根据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
然后就是最终的调用了:
Storck storck = service.getStorckPort();
System.out.println(storck.hello( "T om " ));
运行时,控制台打印结果为:Hello,Tom
五、使用metro编写代码调用.Net WebService
在.net环境编写WebService服务代码WebService1.asmx:
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;
}
}
}
用wsimport生成相关代码,上面有讲,这里略过,不过不同的是,生成了6个文件:
HelloWorld.java
HelloWorldResponse.java
ObjectFactory.java
package-info.java
WebService1.java
WebService1Soap.java
最终调用代码:
WebService1Soap soap = service.getWebService1Soap();
System.out.println(soap.helloWorld( " Lily " ));
运行时,控制台打印结果为:Hi,Lily