我有一个WSDL
架构链接。使用NetBeans,我从此模式生成了类。但是我无法理解,如何使用它向服务器发送请求? NetBeans生成了XXXImplService extends Service
类,我应该使用它吗?怎么样?
我认为,我只需创建对象(匹配WSDL
方法和类),设置必要的属性并以某种方式将此对象转换为请求文本,然后发送并获取文本响应,我可以变成班级。这是真的吗?
答案 0 :(得分:2)
当然您必须使用WSDL
,按照以下步骤获取Java Web服务(JAX-WS)的完整客户端应用程序:
假设您有这样的Web服务:
@WebService
public class Hello {
private String message = new String("Hello, ");
public void Hello() {}
@WebMethod
public String sayHello(String name) {
return message + name + ".";
}
}
使用javax.xml.ws.WebServiceRef
注释来声明
对Web服务的引用。 @WebServiceRef
使用wsdlLocation
element用于指定已部署服务的WSDL文件的URI:
@WebServiceRef(wsdlLocation="http://localhost:8080/helloservice/hello?wsdl")
static HelloService service;
通过调用检索服务的代理,也称为端口 getHelloPort服务。
Hello port = service.getHelloPort();
该端口实现服务定义的SEI。
调用端口的sayHello方法,将服务名称传递给服务。
String response = port.sayHello(name);
编辑(在评论中请求)如果网络服务请求基本身份验证并想要传递用户名和密码,您可以像这样传递它们(还有其他方式也):
import java.net.Authenticator;
import java.net.PasswordAuthentication;
Authenticator authenticator = new Authenticator()
{
@Override
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("usr", "pass".toCharArray());
}
};
Authenticator.setDefault(authenticator );
但是,如果您希望应用程序级别的身份验证不是基本的 HTTP this link可能很有用。
答案 1 :(得分:1)
您必须立即在此生成的服务impl和Web方法中实现您的代码。因此,当您通过Web服务客户端(SOAP UI等)调用服务端点和特定方法时,这些生成的类将接受调用并通过服务impl路由到您的实现。
答案 2 :(得分:1)
本教程将帮助您逐步完成。由于您已经创建了存根类,因此请跳过第一部分。专注于“Web服务调用”部分。
http://www.ibm.com/developerworks/webservices/library/ws-apacheaxis/index.html?ca=dat