无法解析REST响应Spring-Jibx

时间:2017-01-08 06:23:04

标签: java xml spring web-services jibx

我在使用Spring和Jibx解组RESTful请求主体时遇到了问题。

这是我通过邮递员发送的请求正文:

<?xml version="1.0" encoding="utf-8"?>
<locationRequest xmlns="urn:ietf:params:xml:ns:geopriv:held" responseTime="30000">
  <locationType exact="true">
    geodetic
    civic 
    locationURI
  </locationType>
  <device xmlns="urn:ietf:params:xml:ns:geopriv:held:id">
    <uri>tel:123456789;phone-context=+1</uri>
  </device>
</locationRequest>  

这是我的binding.xml

...
<mapping name="locationRequest" class="com.example.integrations.models.LocationRequest" ordered="true">
    <namespace uri="urn:ietf:params:xml:ns:geopriv:held" default="elements" />
    <value name="responseTime" field="responseTime" style="attribute" usage="optional"/>
    <structure name="locationType" field="locationType" map-as="locationType" usage="required"/>
    <structure field="device" usage="required"/>
</mapping>


<mapping name="device" class="com.example.integrations.models.Device" >
    <namespace uri="urn:ietf:params:xml:ns:geopriv:held:id" default="elements" />
    <value name="uri" field="uri" />
</mapping>

<mapping abstract="true" type-name="locationType" class="com.example.integrations.models.LocationType">
    <value name="exact" field="exact" style="attribute"/>
    <value field="types" style="text"
           serializer="com.example.integrations.ParseUtil.serializeStringList"
           deserializer="com.example.integrations.ParseUtil.deserializeStringList" />
</mapping>
...

当我运行Jibx编译器时,一切都很好,所有类都被编译器正确检测和修改

这是接收Web服务调用的方法:

current_code

如果我使用.xml文件作为输入,请求会正确解组,但是如果我通过Web服务它缺少一些数据:

...
 <locationType exact="true">
    geodetic
    civic 
    locationURI
  </locationType>
...

&#34;确切&#34;属性被正确解析,但是在xml文件上的内容被解析好了,在Web服务对象中丢失了......为了爱我,我无法弄清楚原因。

(注意:返回邮递员时,响应对象(LocationResponse)也没有正确编组)

这是我与jibx相关的Spring-servlet配置:

...
    <beans:bean id="unmarshaller" class="org.springframework.oxm.jibx.JibxMarshaller">
        <beans:property name="targetClass" value="org.dellroad.jibxbindings.pidf.held.LocationRequest"/>
        <beans:property name="bindingName" value="locationRequest"/>
    </beans:bean>

    <beans:bean id="marshaller" class="org.springframework.oxm.jibx.JibxMarshaller">
        <beans:property name="targetClass" value="org.dellroad.jibxbindings.pidf.held.LocationRequest"/>
        <beans:property name="bindingName" value="locationRequest"/>
    </beans:bean>
...

我在这里缺少什么?我怀疑在Spring方面是一个错误的配置

0 个答案:

没有答案