从wsdl生成java类

时间:2012-09-28 14:36:55

标签: java soap jaxb wsdl cxf

我有一个wsdl,从中我使用apache cxf生成服务器存根。问题是我部署的新wsdl与初始版本不同,因此对旧版本的SOAP请求不适用于新版本。我用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天了。请帮忙。

修改 这个 init 前缀取决于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属性指定定义服务的目标命名空间。如果未指定此属性,则目标命名空间将从包名称派生。

我该怎样摆脱这个?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

“旧”肥皂消息实际上是无效的,可能应该从未起作用。根据soap规范,soap的子项:Body必须是名称空间限定的。看起来“新”行为就是你想要的行为。