0

我有一个 wsdl,从中我使用 apache cxf 生成了服务器存根。问题是我部署的新 wsdl 与最初的不同,因此旧的肥皂请求不适用于新的。我使用soapUI对其进行测试。新的有这个奇怪的命名空间init

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:init="http://initiator.clientprovisioning_1_0.mdm.smarttrust.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <init:cpDiscovery.Response>

旧肥皂消息没有这个:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <cpDiscovery.Response>

我会提供任何需要的额外信息。我已经尝试解决这个问题 2 天了。请帮忙。

编辑 这个初始化前缀取决于java包的第一个字母。例如,如果类在 me.mycompany.example 中,前缀是:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:exam="http://example.mycompany.net/">
   <soapenv:Header/>
   <soapenv:Body>
      <exam:cpDiscovery.Response>

编辑 http://cxf.apache.org/docs/developing-a-service.html#DevelopingaService-AnnotatingtheCode 这说明

targetNamespace 属性 指定定义服务的目标命名空间。如果未指定此属性,则目标命名空间派生自包名称。

我该如何摆脱这个?

4

2 回答 2

1

您已经在描述 SOAP 负载的 XML 模式中引入了一个命名空间。这不应该影响客户端调用您的服务的能力,只要他们可以访问模式文件。

于 2012-09-28T15:03:35.193 回答
1

“旧”肥皂消息实际上是无效的,并且可能永远不会起作用。根据soap 规范,soap:Body 的子项必须是命名空间限定的。看起来“新”行为是您想要的行为。

于 2012-09-28T15:47:43.160 回答