【问题标题】:Web service client getting NullPointerException from getMyWSPortWeb 服务客户端从 getMyWSPort 获取 NullPointerException
【发布时间】:2012-02-07 01:22:27
【问题描述】:

我创建了一个名为TimeServerBean 的简单网络服务。它工作正常,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 时我得到了空值。在此期间,服务器已启动并运行。有什么明显的错误吗? TimeServerBeanTimeServerBean_Service 是从 WSDL 生成的类。

【问题讨论】:

  • 这个方法是返回null,还是你得到一个NullPointerException
  • 我没有看到 try/catch 块。如果您还没有,请添加一个,然后查看异常(我猜您可能得到异常)。
  • 我的半知性猜测是@WebServiceRef 是应用服务器的依赖注入机制寻找的注释,并自动为您实例化TimeServerBean_ServiceSimpleClient 用在什么样的应用程序中?如果它是一个 Web 应用程序,请考虑从 Glassfish 知道的“Web”对象获取服务对象。如果它是一个独立的应用程序,您必须自己实例化服务对象。希望更熟悉 JAX-WS 的人能更好地回答这个问题。
  • 您在哪个容器中运行客户端以及如何创建 SimpleClient 实例?
  • SimpleClient 是使用 wsdl 文件创建的 Web 服务客户端,它位于 netbeans 的 Java 应用程序项目中。我从 GUI 界面创建了它的一个新实例。

标签: java web-services netbeans jax-ws


【解决方案1】:

两个建议:

  1. 绝对将您的方法放在try/catch 块中

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

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

【讨论】:

  • 原来我只需要使用 netbeans 的插入代码功能就可以完成所有工作。
  • @latusaki - 很高兴你让它工作了 :) 就我个人而言,我使用 Eclipse:a) Eclipse 适用于 J2EE 和 Android 的东西,b) Eclipse 对 IBM 更友好(而且我与 IBM 产品一起工作),以及 c) Eclipse 往往具有更大的“生态系统”(更多的第 3 方附加组件)。恕我直言...
【解决方案2】:

@WebServiceRef 注释仅在某些类类型中受支持。示例有 JAX-WS 端点实现类、JAX-WS 处理程序类、Enterprise JavaBeans 类和 servlet 类。在与 @Resource 注释相同的类类型中支持此注释。有关受支持的类类型的完整列表,请参阅 Java Platform, Enterprise Edition (Java EE) 5 规范。

【讨论】:

    【解决方案3】:

    我通常通过使用接口和类创建一个实例来做到这一点。

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      相关资源
      最近更新 更多