Измените префикс пространства имен 'ns2' на 'urn' и поместите спецификацию имени в корневой элемент - PullRequest
2 голосов
/ 15 марта 2019

Это мой XSD, который я использую для генерации Java-классов (используя jaxb2-maven-plugin):

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://b2b.adx.com" targetNamespace="http://b2b.adx.com" elementFormDefault="qualified">
    <xs:element name="CheckRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Authentication" type="tns:AuthenticationType"/>
                <xs:element name="Request" type="tns:RequestType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="CheckResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Message" type="tns:MessageType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="AuthenticationType">
        <xs:sequence>
            <xs:element name="username" type="xs:string"/>
            <xs:element name="password" type="xs:int"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="RequestType">
        <xs:sequence>
            <xs:element name="countryID" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="MessageType">
        <xs:sequence>
            <xs:element name="messageCode" type="xs:string"/>
            <xs:element name="messageText" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

Я использую эти сгенерированные классы для создания службы SOAP с использованием Spring.Ответ выглядит так:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <ns2:CheckVinResponse xmlns:ns2="http://b2b.adx.com">
         <ns2:Message>
            <ns2:messageCode>2000</ns2:messageCode>
            <ns2:messageText>A message text</ns2:messageText>
         </ns2:Message>
      </ns2:CheckVinResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Мне нужен ответ, чтобы выглядеть примерно так:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:AudaSmartCheckWSDL">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <urn:CheckVinResponse>
         <urn:Message>
            <urn:messageCode>2000</ns2:messageCode>
            <urn:messageText>A message text</ns2:messageText>
         </urn:Message>
      </urn:CheckVinResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Как этого добиться, пожалуйста?Я могу изменить код службы XSD или SOAP, но не могу изменить спецификацию ответа.

...