【问题标题】:Remove the Result wrapper from web service response?从 Web 服务响应中删除 Result 包装器?
【发布时间】:2015-07-16 18:53:07
【问题描述】:

我有一个 asmx 网络服务,它有一个网络方法

    [WebMethod(Description = "Request for Read Stop Sale")]
    [SoapHeader("Security", Direction = SoapHeaderDirection.In)]
    [SoapDocumentMethod(ParameterStyle=SoapParameterStyle.Bare,Action="OTA_HotelBookingRule")]
    public XmlDocument ReadStopSales()
    {
    ....
     I am getting some details from database and converting and transforming it into
    XML and then putting it into XmlDocument object and returning it...
    XmlResultDocument.LoadXml(results.ToString());
     return XmlResultDocument;
    }

我加载到 XmlResultDocument 的结果具有根元素

我正在通过调用 SoapUI 来测试此方法,结果如下:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <ReadStopSalesResult xmlns="http://localhost:6092/connectAPI.asmx">
         <OTA_HotelBookingRuleRS xmlns="">
            <RuleMessage HotelCode="5">
               <StatusApplication RatePlanCode="579_1" InvTypeCode="579" RatePlanCategory="BB"/>
               <BookingRules>
                  <BookingRule Start="2015-07-15" End="2015-07-15">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-16" End="2015-07-16">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-17" End="2015-07-17">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-18" End="2015-07-18">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-19" End="2015-07-19">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-20" End="2015-07-20">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-21" End="2015-07-21">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-22" End="2015-07-22">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-23" End="2015-07-23">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-24" End="2015-07-24">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-25" End="2015-07-25">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-26" End="2015-07-26">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
               </BookingRules>
            </RuleMessage>
         </OTA_HotelBookingRuleRS>
      </ReadStopSalesResult>
   </soap:Body>
</soap:Envelope>

我不需要元素
在此元素中,“ReadStopSales”是您在 C# 代码中看到的 Web 方法名称。

我想要我的结果如下:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
         <OTA_HotelBookingRuleRS xmlns="">
            <RuleMessage HotelCode="5">
               <StatusApplication RatePlanCode="579_1" InvTypeCode="579" RatePlanCategory="BB"/>
               <BookingRules>
                  <BookingRule Start="2015-07-15" End="2015-07-15">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-16" End="2015-07-16">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-17" End="2015-07-17">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-18" End="2015-07-18">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-19" End="2015-07-19">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-20" End="2015-07-20">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-21" End="2015-07-21">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-22" End="2015-07-22">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-23" End="2015-07-23">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-24" End="2015-07-24">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-25" End="2015-07-25">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
                  <BookingRule Start="2015-07-26" End="2015-07-26">
                     <RestrictionStatus Restriction="Master" Status="Open"/>
                  </BookingRule>
               </BookingRules>
            </RuleMessage>
         </OTA_HotelBookingRuleRS>
   </soap:Body>
</soap:Envelope>

请帮助如何删除默认结果元素......

【问题讨论】:

    标签: web-services xml-parsing asmx soap-client


    【解决方案1】:

    您可以尝试实现WebserviceHandler 并更改响应消息。示例代码如下所示:

    public class ChangeMessageHandler implements SOAPHandler<SOAPMessageContext> {
    
    @Override
    public boolean handleMessage(SOAPMessageContext context) {
    
        Boolean outbound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
        if (!outbound) {
            try {
               SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();  
               soapMessage.getSOAPBody().appendChild(context.getMessage().getSOAPBody().getFirstChild().getFirstChild());
               context.setMessage(soapMessage); 
            } 
            catch (Exception ex) {
    
            }
        }        
        return true;
    } }
    

    基本上,我正在尝试获取第二个节点并将其添加到新消息中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      相关资源
      最近更新 更多