在OSGi包中包含WSDL

时间:2014-04-18 18:23:31

标签: java web-services wsdl osgi cxf

我有一个需要与网络服务通信的软件包。客户端是使用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中的内容复制到一个新文件中,但我仍然遇到了这个错误。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

由于我无法将WSDL包含在类路径中,所以我采用了另一种方式。我在CRXDE的/ etc /下创建了我的应用程序目录(我正在使用Adobe CQ5)并将WSDL文件放在那里。然后我只是将我的Web服务客户端指向目录的http地址(这将是http://localhost:4503/etc/projectname/webservice.wsdl)。

我仍然愿意采用更清晰的方法(这只适用于发布实例,因为在作者实例上它需要登录凭据),但到目前为止它完成了我需要的工作并允许我一次部署所有内容