【发布时间】: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