现有一个部署在JBoss上的Web Service端点:
@WebService(name = "SSO", serviceName="SSOService", targetNamespace="http://edxu")
@SOAPBinding(style=SOAPBinding.Style.RPC)
public interface SSO {
@WebMethod
public String login(String userName, String password);
}
一. 利用JBoss本身提供的WS库进行访问
运行需要导入$JBOSS_HOME/server/all/deploy/jbossws.sar下的jar包
客户端代码如下:
private static final String WSDL = "http://localhost:8080/SSOBeanService/SSOBean?wsdl";
private static final String NAMESPACE = "http://edxu";
private static final String SVCNAME = "SSOService";
private static final String PORT = "SSOPort";
Service service = Service.create(new URL(WSDL), new QName(NAMESPACE, SVCNAME));
SSO ssoBean = (SSO)service.getPort(new QName(NAMESPACE, PORT), SSO.class);//也可以不指定Port,只用Class一个参数
以上的代码可以获得一个SSO接口的实例。
二. 利用Sun的JAX-WS 2.1库进行访问
这种方式要在本地客户端必须建立远端Web Service的本地存根,利用包装类接口进行访问,方便起见最好采用NetBeans根据WSDL的地址自动生成本地存根,方法如下:
在NetBeans中建立一个Java应用程序或者Web应用程序的项目,右键点击项目名称,选择新建文件,选择文件类型为Web服务客户端,填入远程WSDL的地址,选择包,点击完成。即可看到输出中自动生成了本地WSDL文件及包装类。
上面的例子中包装类文件有两个:
SSO.java Web服务接口
SSOService.java 访问代理
代码大致如下:
SSO.java:
@WebService(name = "SSO", targetNamespace = "http://edxu")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface SSO {
@WebMethod
@WebResult(partName = "return")
public String login(
@WebParam(name = "arg0", partName = "arg0")
String arg0,
@WebParam(name = "arg1", partName = "arg1")
String arg1);
}
SSOService.java:
@WebServiceClient(name = "SSOService", targetNamespace = "http://edxu", wsdlLocation = "http://localhost:8080/SSOBeanService/SSOBean?wsdl")
public class SSOService
extends Service{
private final static URL SSOSERVICE_WSDL_LOCATION;
static {
URL url = null;
try {
url = new URL("http://localhost:8080/SSOBeanService/SSOBean?wsdl");
} catch (MalformedURLException e) {
e.printStackTrace();
}
SSOSERVICE_WSDL_LOCATION = url;
}
public SSOService() {
super(SSOSERVICE_WSDL_LOCATION, new QName("http://edxu", "SSOService"));
}
@WebEndpoint(name = "SSOPort")
public SSO getSSOPort() {
return (SSO)super.getPort(new QName("http://edxu", "SSOPort"), SSO.class);
}
}
现在可以写我们的客户端代码了,非常简单,只用一句就可以获得SSO接口的远程实例:
SSO ssoBean = new SSOService().getSSOPort();
以上代码需要导入NetBeans中的Sun JAX-WS 2.1库。
以上代码测试环境为JDK1.5.0_12,JBoss 4.2.1GA,NetBeans 5.5.1。
没有评论:
发表评论