web-services – 使用JAX-WS修改Web服务的响应

前端之家收集整理的这篇文章主要介绍了web-services – 使用JAX-WS修改Web服务的响应前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何修改响应的命名空间,如下所示:

旧的回应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:GetAmountResponse xmlns:ns2="http://ws.dsi.otn.com/dab">
         <etat>0</etat>
         <montant>500.0</montant>
      </ns2:GetAmountResponse>
   </soap:Body>
</soap:Envelope>

想要的新回应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <GetAmountResponse xmlns="http://ws.dsi.otn.com/dab">
         <etat>0</etat>
         <montant>500.0</montant>
      </GetAmountResponse>
   </soap:Body>
</soap:Envelope>

我想删除ns2 namespce前缀.

解决方法

在第一种情况下,GetAmountResponse位于命名空间http://ws.dsi.otn.com/dab中,而etat和montant位于默认(空)命名空间中.

在您想要的新消息中,GetAmountResponse,etat和montant都在命名空间http://ws.dsi.otn.com/dab中.

可以从类的名称空间控制名称空间.在所有名称空间中使用相同的名称空间,您将在同一名称空间中使用它们,保留具有默认值的类,并且它们默认为空名称空间.

例如,如果您在Web服务类中有类似的内容

@WebMethod
    public 
    @WebResult(name = "getAmountResponse",targetNamespace = "http://ws.dsi.otn.com/dab")
    AmountResponse getAmount(
            @WebParam(name = "getAmountRequest",targetNamespace = "http://ws.dsi.otn.com/dab") AmountRequest request) {

        AmountResponse response = new AmountResponse();
        response.setEtat(0);
        response.setMontant(500.0);

        return response;
    }

使用这样的响应类:

@XmlRootElement
public class AmountResponse {
    private int etat;
    private double montant;
    // getter and setters omitted
}

你将得到第一种肥皂信息.

但是,如果您将响应类更改为以下内容

@XmlRootElement(namespace = "http://ws.dsi.otn.com/dab")
@XmlAccessorType(XmlAccessType.NONE)
public class AmountResponse {

    @XmlElement(namespace = "http://ws.dsi.otn.com/dab")
    private int etat;

    @XmlElement(namespace = "http://ws.dsi.otn.com/dab")
    private double montant;

    // getters and setter omitted
}

您将把所有标记放在同一个命名空间中,并获得与您想要的新类型消息等效的内容.我说相当于因为我不认为你会得到这个:

<GetAmountResponse xmlns="http://ws.dsi.otn.com/dab">
     <etat>0</etat>
     <montant>500.0</montant>
</GetAmountResponse>

相反,它更有可能得到这样的东西:

<ns2:getAmountResponse xmlns:ns2="http://ws.dsi.otn.com/dab">
     <ns2:etat>0</ns2:etat>
     <ns2:montant>500.0</ns2:montant>
</ns2:getAmountResponse>

这两个消息的“XML含义”相同,尽管它们看起来不一样.

如果你绝对希望它看起来像这样,我认为你必须去“低级别”并使用类似a SOAP handler to intercept the response and modify it的东西.但要注意,在它上线之前更改消息不是一项微不足道的任务.

猜你在找的HTML相关文章