我在使用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服务调用的方法:
如果我使用.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方面是一个错误的配置