我创建了一个名为TimeServerBean
的简单Web服务。它工作正常,GlassFish服务器正在运行,我可以从浏览器访问WSDL文件。请注意,这是在本地主机上完成的。
接下来,我创建了一个新项目并创建了一个Web服务客户端,并提供了WSDL文件的URL。然后我得到了一些生成的类(JAX-WS)。 在我的客户端类中,我有这段代码:
public class SimpleClient {
@WebServiceRef(wsdlLocation = "wsdl url here")
static TimeServerBean_Service service;
private TimeServerBean bean;
public SimpleClient() {
bean = service.getTimeServerBeanPort();
}
//methods here
}
虽然我在调用getTimeServerBeanPort
时得到null。在此期间,服务器已启动并正在运行。有一些明显的错误吗? TimeServerBean
和TimeServerBean_Service
是WSDL生成的类。
答案 0 :(得分:4)
两个建议:
明确地将您的方法放在try
/ catch
块中
假设service
本身为null,则尝试执行显式service.create()
而不是使用@WebServiceRef
注释。这是一个很好的例子(Websphere,但原理相同):
答案 1 :(得分:0)
@WebServiceRef注释仅在某些类类型中受支持。示例是JAX-WS端点实现类,JAX-WS处理程序类,Enterprise JavaBeans类和servlet类。与@Resource注释在相同的类类型中支持此注释。有关受支持的类类型的完整列表,请参阅Java平台企业版(Java EE)5规范。
答案 2 :(得分:0)
我通常通过使用接口和类创建实例来实现它。
public class SimpleClient {
// interface TimeServerBean_Service class TimeServerBean
@WebServiceRef(wsdlLocation = "wsdl url here")
static TimeServerBean_Service port = new TimeServerBean.getTimeServerBeanPort();
public static void main(String[] args) {
try {
System.out.println(port);
System.out.println(port.methodWS("args"));
} catch (Exception e) {
e.printStackTrace();
}
}
//methods here
}