【问题标题】:Using CXF web service from java web start从 java web start 使用 CXF web 服务
【发布时间】:2009-12-23 19:06:47
【问题描述】:

更新:我已将我的问题提交到 CXF 用户的邮件列表,这里

更新:我目前已经签署了我所有的罐子。我似乎仍然无法以可以找到 WSDL 的方式设置 CXF。我最后一次尝试是将 WSDL 放在我的 WAR 文件中,这样我就可以通过 Web 浏览器访问它。我将客户端内部的 wsdllocation 设置为 URL (http://www.example.com/app/example.wsdl)。我现在收到以下异常:

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
at com.sun.xml.internal.ws.util.xml.XmlUtil.createDefaultCatalogResolver(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source)
at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(Unknown Source)
at javax.xml.ws.Service.<init>(Unknown Source)

谷歌搜索几乎没有任何结果。

我正在使用Apache CXF 从给定的 WSDL 创建 Web 服务客户端。我遇到了问题,但是在尝试访问该服务时,我得到了这个异常:

Can not initialize the default wsdl from ../resource/example.wsdl
Exception in thread "AWT-EventQueue-0" java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)

我没有签署我的 Web 启动应用程序,并且不希望这样做,因为我没有从客户端计算机访问任何资源。提到的WSDL 打包在我的jar 中。问题是由 CXF 生成的客户端代码引起的:

    URL url = null;
    try {
        url = new URL("../resource/example.wsdl");
    } catch (MalformedURLException e) {
        System.err.println("Can not initialize the default wsdl from ../resource/example.wsdl");
        // e.printStackTrace();
    }
    WSDL_LOCATION = url;

如何正确地将 CXF 指向此 WSDL?我也担心类上的WebService注解:

@WebServiceClient(name = "Example", 
              wsdlLocation = "../resource/example.wsdl",
              targetNamespace = "http://services.example.com/") 

我还需要更改吗?

【问题讨论】:

    标签: java web-services cxf java-web-start


    【解决方案1】:

    您需要将该 wsdlLocation 更改为类路径:引用。

    使用-wsdlLocation 如图here

    【讨论】:

    • 我到底用什么来作为一个值呢? WSDL 位于我的 jar 中,仅指定 wsdl 名称会导致安全异常,因为它试图从 user.dir 加载。
    • 一个类路径:/org/foo/bar.wsdl 路径,我想。
    • 我尝试使用 classpath:example.wsdl 作为 -wsdlLocation 的输入,但在运行它时我得到了这个异常:无法从 classpath 初始化默认 wsdl:WEXAuth.wsdl 线程中的异常“AWT-EventQueue -0" java.security.AccessControlException:访问被拒绝(java.util.PropertyPermission user.dir 读取)
    • 是时候在 CXF 用户邮件列表上发布消息了。
    • @bmargulies 我现在就这样做!感谢您的意见。
    【解决方案2】:

    经过一些错误和实验,我设法让一切正常工作。首先,确保cxf.jarwsdl4j.jar 实际上在您的类路径中。我以为我已经验证了这一点,但是因为我是通过 webstart 从一个 jar 中实例化客户端,该 jar 本身包含在一个 WAR 中,所以我在构建过程中搞砸了 cxf 运行时的位置。此外,在指定 wsdl 位置时,我必须使用"classpath:my.wsdl"。我让自己变得轻松,只是将 wsdl 放在与我的源相同的位置。

    希望这对可能在某个时候做同样事情的人有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      相关资源
      最近更新 更多