我有一个需要与网络服务通信的软件包。客户端是使用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中的内容复制到一个新文件中,但我仍然遇到了这个错误。有什么想法吗?
答案 0 :(得分:0)
由于我无法将WSDL包含在类路径中,所以我采用了另一种方式。我在CRXDE的/ etc /下创建了我的应用程序目录(我正在使用Adobe CQ5)并将WSDL文件放在那里。然后我只是将我的Web服务客户端指向目录的http地址(这将是http://localhost:4503/etc/projectname/webservice.wsdl
)。
我仍然愿意采用更清晰的方法(这只适用于发布实例,因为在作者实例上它需要登录凭据),但到目前为止它完成了我需要的工作并允许我一次部署所有内容