【问题标题】:Include WSDL in OSGi bundle在 OSGi 包中包含 WSDL
【发布时间】:2014-04-18 18:23:31
【问题描述】:

我有一个需要与网络服务通信的包。客户端是使用 Apache CXF 生成的,Web 服务的 WSDL 是本地文件,因为目标系统不托管 WSDL。

如何将 WSDL 集成到我的 OSGi 包中?当前,Web 服务客户端指向 WSDL 的文件路径,这对于部署非常无用。有什么方法可以将 WSDL 放入 OSGi 包中?我对资源文件夹进行了讨论,但我的 OSGi 包中没有。

这是Java类的相关部分:

@WebServiceClient(name = "WebService", targetNamespace = "http://company.com/target/namespace", wsdlLocation = "/tmp/WebService.wsdl")
public class WebService

试用this文章后,我的代码如下:

static {
        URL url = null;
        WebServiceException e = null;
        try {
            url =  XI07D2B3188DService.class.getClassLoader().getResource("WebService.wsdl");
        } catch (Exception ex) {
            e = new WebServiceException(ex);
        }
        XI07D2B3188DSERVICE_WSDL_LOCATION = url;
        XI07D2B3188DSERVICE_EXCEPTION = e;
    }

找不到 WSDL 的错误现在消失了,但我有一个新错误:

500 XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.

这是我的 WSDL 的开始:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="SI_PARTNER_OPENTIMES_OA" targetNamespace="http://company.ch/xi/partnernet/partner" xmlns:p1="http://company.ch/xi/partnernet/partner" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:documentation />
  <wsp:UsingPolicy wsdl:required="true" />
  <wsp:Policy wsu:Id="OP_SI_PARTNER_OPENTIMES_OA" />

我已经检查了关于 SO 的this 问题。我尝试将其更改为 UTF-16,但这并没有帮助。我还将 Eclipse 中的内容复制到了一个新文件中,但仍然出现此错误。有什么想法吗?

【问题讨论】:

  • 请参阅here,了解从非托管客户端中的类路径加载 WSDL 的 JAX-WS 示例。
  • @McDowell 虽然这与普通的 Java 代码一样工作,但我必须将我的 WSDL 位置指定为注释的参数(更新了问题以进行澄清)。我不知道是否以及如何从那里引用该文件。
  • wsdlLocation 只是一个逻辑路径,运行时可以忽略。如果您的代码中有特定的异常,请说明这是什么以及您遇到的异常。显示一些代码。
  • @McDowell 我现在尝试了您的链接。有关更多详细信息,请参阅更新的问题。我可以向您发布整个 Web 服务代码,但它是自动生成的,实际上看起来很丑。
  • Content is not allowed in prolog 可能由多种原因引起,但 encoding="UTF-8" 声明需要与文档的 actual encoding 匹配。这是任何 OSGi 相关问题的单独问题。

标签: java web-services wsdl osgi cxf


【解决方案1】:

由于我无法将 WSDL 包含到类路径中,因此我采用了另一种方式。我在 CRXDE 的 /etc/ 下为我的应用程序创建了一个目录(我使用的是 Adob​​e CQ5)并将 WSDL 文件放在那里。然后我刚刚将我的 Web 服务客户端指向目录的 http 地址(本来应该是 http://localhost:4503/etc/projectname/webservice.wsdl)。

我仍然愿意采用更简洁的方法(这仅适用于 Publish 实例,因为在作者实例上它需要登录凭据),但到目前为止它可以满足我的需要并允许我一次部署所有内容.

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 2010-11-27
    • 2023-04-07
    • 2019-12-04
    • 2014-11-01
    • 2016-08-20
    • 2014-10-02
    • 2020-01-27
    • 1970-01-01
    相关资源
    最近更新 更多