使用Spring-WS和Jaxb删除Web服务响应中的命名空间标记

时间:2014-05-14 20:09:37

标签: java web-services soap jaxb spring-ws

我使用在Spring Framework上使用JAXB创建的端点SOAP,但是我希望我的回答(预期响应)在我发送请求一时返回没有前缀,但是返回就像当前响应中显示的那样:

如何返回没有名称空间的SOAP消息?

请求一个

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"     xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
<soapenv:Header/>
<soapenv:Body>
<urn:ZProveerDatosPagoProveed2>
    <Bukrs>RG10</Bukrs>
    <Langu>S</Langu>
    <Lifnr>00000000</Lifnr>
</urn:ZProveerDatosPagoProveed2>
</soapenv:Body>
</soapenv:Envelope>

当前回应:

<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header/>
<soap-env:Body>
<n0:ZProveerDatosPagoProveed2Response xmlns:n0="urn:sap-com:document:sap:soap:functions:mc-style">
    <Adrnr>0000</Adrnr>
    <Bankk>0000</Bankk>
    <Bankn>0000</Bankn>
    <Bkont>0000</Bkont>
    <Iban>ES0000</Iban>
    <KoinhFi>ROBLES AVN</KoinhFi>
    <Land1>TH</Land1>
    <Landx>XXXXX</Landx>
    <Name1>ROBLES AVN</Name1>
    <Pstlz>0000</Pstlz>
    <Stcd1>A0000</Stcd1>
    <Stras>ROBLES AVN</Stras>
    <Swift>XXXXX</Swift>
    <Text1_052>ROBLES AVN</Text1_052>
    <Zterm>Z000</Zterm>
</n0:ZProveerDatosPagoProveed2Response>
</soap-env:Body>
</soap-env:Envelope>

请求一个和当前响应,是嵌入在另一个Web服务(我实现)中的Web服务的请求/响应,这个实现的原因是它已经请求最终答案是这个(没有名称空间标签) ):

预期回应

<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header/>
<soap-env:Body>
 <ZProveerDatosPagoProveed2Response xmlns="urn:sap-com:document:sap:soap:functions:mc-style">
     <Adrnr>0000</Adrnr>
     <Bankk>0000</Bankk>
     <Bankn>0000</Bankn>
     <Bkont>0000</Bkont>
     <Iban>ES0000</Iban>
     <KoinhFi>ROBLES AVN</KoinhFi>
     <Land1>TH</Land1>
     <Landx>XXXXX</Landx>
     <Name1>ROBLES AVN</Name1>
     <Pstlz>0000</Pstlz>
     <Stcd1>A0000</Stcd1>
     <Stras>ROBLES AVN</Stras>
     <Swift>XXXXX</Swift>
     <Text1_052>ROBLES AVN</Text1_052>
     <Zterm>Z000</Zterm>
 </ZProveerDatosPagoProveed2Response>
</soap-env:Body>
</soap-env:Envelope>

1 个答案:

答案 0 :(得分:0)

我能够做到的方式如下:

  1. 包括以下两个来自JAXB的罐子:jaxb-core.jar和jaxb-impl.jar
  2. 在package-info.java文件中,设置以下设置:
  3. 假设你的命名空间是&#34; 你的名字空间&#34;

    @javax.xml.bind.annotation.XmlSchema(namespace = yournamespace, 
    xmlns = {@javax.xml.bind.annotation.XmlNs(prefix = "", 
    namespaceURI = yournamespace)},
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
    attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.UNSET)
    package com.ctpayment.admin;
    

    似乎java的当前实现忽略了以前的设置,但jaxb jar却没有。我没有进一步推动我的调查。最后但并非最不重要的,你需要两个罐来编译。