小编Aar*_*n T的帖子

Apache CXF在Web服务上的命名空间问题

我正在使用Apache CXF 2.7.3,并遇到一个我真的不明白的命名空间问题.我已经尝试过广泛搜索,但我找到的大部分结果都是针对不同的行为.问题是在调用Web服务时,如果参数元素是名称空间限定的,它将失败.消息中的所有其他元素都是合格的,它接受它,而不是参数元素.这是精确的行为:

请求WITHOUT参数元素限定:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                  xmlns:ord="http://www.example.org/order">
<soapenv:Header/>
   <soapenv:Body>
      <ord:getOrder>
         <id>a</id>
      </ord:getOrder>
   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

结果成功:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:getOrderResponse xmlns:ns2="http://www.example.org/order">
         <return>
            <ns2:errorCode/>
            <ns2:errorMessage/>
            <ns2:order>
               <ns2:orderNumber>ABC123</ns2:orderNumber>
               <ns2:lastName>Smith</ns2:lastName>
            </ns2:order>
         </return>
      </ns2:getOrderResponse>
   </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

请求WITH参数限定:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                  xmlns:ord="http://www.example.org/order">
   <soapenv:Header/>
   <soapenv:Body>
      <ord:getOrder>
         <ord:id>a</ord:id>
      </ord:getOrder>
   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

导致JAXB异常:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Unmarshalling Error: unexpected element (uri:"http://www.example.org/order", local:"id"). Expected elements are &lt;{}id></faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

在我所做的所有研究中,这通常意味着命名空间在某处不匹配.但是我已经彻底检查了它,并且命名空间在任何地方都是相同的,包括ObjectFactory.class,package-info.class和cxf-servlet.xml配置文件以及@WebService注释.任何人都可以指出我正确的方向,我在这里失踪了什么?

java web-services cxf java-ws jaxb2

4
推荐指数
1
解决办法
1万
查看次数

从json解组嵌套对象

我有传入的JSON字符串,我需要解组到JAXB注释对象.我正在使用jettison这样做.JSON字符串如下所示:

{ 
  objectA : 
  { 
    "propertyOne" : "some val", 
    "propertyTwo" : "some other val",
    objectB : 
    {
      "propertyA" : "some val",
      "propertyB" : "true" 
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

ObjectA代码如下所示:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "objectA")
public class ObjectA {
    @XmlElement(required = true)
    protected String propertyOne;
    @XmlElement(required = true)
    protected String propertyTwo;
    @XmlElement(required = true)
    protected ObjectB objectB;
}
Run Code Online (Sandbox Code Playgroud)

ObjectB类代码如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "objectB")
public class ObjectB {
    @XmlElement(required = true)
    protected String propertyA;
    @XmlElement(required = true)
    protected boolean propertyB;
}
Run Code Online (Sandbox Code Playgroud)

用于解组的代码:

JAXBContext …
Run Code Online (Sandbox Code Playgroud)

json jaxb jettison

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

cxf ×1

java ×1

java-ws ×1

jaxb ×1

jaxb2 ×1

jettison ×1

json ×1

web-services ×1