【问题标题】:javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"Response")javax.xml.bind.UnmarshalException:意外元素(uri:“”,本地:“响应”)
【发布时间】:2018-09-21 04:50:55
【问题描述】:

需要生成 Soap 服务,该服务使用生成应用程序/XML 的休息服务。

以下是报错

javax.xml.bind.UnmarshalException:意外元素(uri:“”,本地:“响应”)。预期的元素是

<{http://www.amfampoc.com/Vehicle}getAllVehicleMakesRequest>, <{http://www.amfampoc.com/Vehicle}response></faultstring>

XSD 文件

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://spring.io/guides/gs-producing-web-service"
    elementFormDefault="qualified">
    <xs:element name="getCountryRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Response">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Count" type="xs:int" />
                <xs:element name="Message" type="xs:string" />
                <xs:element name="SearchCriteria" type="xs:string" />
                <xs:element name="Results">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element maxOccurs="unbounded" name="VehicleTypesMakes">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="MakeId" type="xs:int" />
                                        <xs:element name="MakeName" type="xs:string" />
                                        <xs:element name="VehicleTypeId" type="xs:int" />
                                        <xs:element name="VehicleTypeName" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

来自服务的示例 XML 响应

 <?xml version="1.0" encoding="UTF-8"?>
    <Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       <Count>24</Count>
       <Message>Response returned successfully</Message>
       <SearchCriteria>Make: merc</SearchCriteria>
       <Results>
          <VehicleTypesMakes>
             <MakeId>449</MakeId>
             <MakeName>Mercedes-Benz</MakeName>
            <VehicleTypeId>2</VehicleTypeId>
            <VehicleTypeName>Passenger Car</VehicleTypeName>
          </VehicleTypesMakes>
          <VehicleTypesMakes>
            <MakeId>449</MakeId>
            <MakeName>Mercedes-Benz</MakeName>
            <VehicleTypeId>3</VehicleTypeId>
            <VehicleTypeName>Truck</VehicleTypeName>
         </VehicleTypesMakes>
       </Results>
    </Response>

【问题讨论】:

    标签: xml rest spring-boot soap xsd


    【解决方案1】:

    XML 响应使用 Response 元素的默认命名空间,这对 XSD 无效。它应该在命名空间http://spring.io/guides/gs-producing-web-service 中。简而言之,响应中应该有类似&lt;Response xmlns="http://spring.io/guides/gs-producing-web-service" ...&gt; 的内容。

    【讨论】:

    • 感谢您的迅速回复。当前从第 3 方收到的响应未发送 xmlns="spring.io/guides/gs-producing-web-service" 。 xsd端有什么可以做的吗?
    • 这不是一个好的做法,但您可以简单地从 XSD 中删除 targetNamespace 属性并查看它是否有效。这会导致您的 XML 元素实际上没有目标命名空间。
    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多