Soap Web 服务响应对象缺少@PayloadRoot 方法的 xmlns 属性

Soap webservice response object missing xmlns attributes for @PayloadRoot method

我正在开发一个用 Spring soap webservice

编写的 SOAP webservice 应用程序

应用程序只是 returns 它从客户端接收到的相同对象作为响应。

在CountryEndpoint.java

@PayloadRoot(namespace = "http://xml.dexter.com/Country", localPart = "CountryLocalPart")
public Country getCountry(SoapHeader soapHeader, @RequestPayload Country request, @SoapHeader(value = "MessageHeader") SoapHeaderElement messageHeader, MessageContext messageContext) {

    System.out.println("THE REQUEST: "+request);
    return request;
}

请求SOAPXML

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header />
  <SOAP-ENV:Body>
    <ns2:Country xmlns="http://example.org" xmlns:ns2="http://xml.dexter.org/Country" xmlns:h="http://pqr.com/pqr.xsd xmlns:s="http://www.w3.org/2003/05/soap-envelope">
      <ns2:countryName>Spain</ns2:countryName>
      <ns2:population>1213123</ns2:population>
  </ns2:Country>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

响应SOAPXML

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header />
  <SOAP-ENV:Body>
    <ns2:Country xmlns:ns2="http://xml.dexter.com/Country">
      <ns2:countryName>Spain</ns2:countryName>
      <ns2:population>1213123</ns2:population>
  </ns2:Country>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

国家 XML 根元素似乎缺少 xmlns 属性。

客户端中的 JAXB 解组步骤失败。

错误是

ERROR: org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].
[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in 
context with path [] threw exception [Request processing failed; nested 
exception is org.springframework.oxm.UnmarshallingFailureException: JAXB 
unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException: 
unexpected element (uri:"http://schemas.xmlsoap.org/soap/envelope/", 
local:"Header"). Expected elements are <{http://www.....}Country>,<{http:
//www.....}Category>,<{http://www.....}SomeOther>] with root cause
javax.xml.bind.UnmarshalException: unexpected element 
(uri:"http://schemas.xmlsoap.org/soap/envelope/", local:"Header"). Expected 
elements are ...

我尝试添加@PayloadRoots 以及@Namespaces 和@Namespace 数组,但没有任何效果。

有没有办法让响应 SOAP xml 与请求 SOAP xml 相同?

谢谢!

请求中 Country 元素中带有前缀 hs 和默认值的命名空间 URI 是多余的,因为它们不对应于任何 XML 元素或属性。没有理由将它们发送到响应中,并且它们会影响 JAXB 解组结果的能力(假设所有内容都已正确映射)。

基于您的例外情况。您的 JAXB 客户端正在尝试解组 Header 元素,您需要解组 Country 元素。