Web服务客户端从getMyWSPort获取NullPointerException

时间:2012-02-07 01:22:27

标签: java web-services netbeans jax-ws

我创建了一个名为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。在此期间,服务器已启动并正在运行。有一些明显的错误吗? TimeServerBeanTimeServerBean_Service是WSDL生成的类。

3 个答案:

答案 0 :(得分:4)

两个建议:

  1. 明确地将您的方法放在try / catch块中

  2. 假设service本身为null,则尝试执行显式service.create()而不是使用@WebServiceRef注释。这是一个很好的例子(Websphere,但原理相同):

  3. http://www-01.ibm.com/support/docview.wss?uid=swg21264135

答案 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
}