简体   繁体   中英

C# Parsing Response of a Java Web Service

I am calling a Java WebLogic web service from my .Net application. I have added a service reference to the jws service.

The service can be called fine and I can see the response in Fiddler, however the problem is that the propery listOfHolds is coming as null although I can see a list of holds in the XML of the response.

Here is the code for calling

holdsList result = proxy.viewHoldsList(request.AccountNo);
int noOfHolds = result.NumberOfHolds; // This value is read fine
object[] holds = result.listOfHolds; // This is coming as Null despite the values in the response

Here is the response XML as captured by Fiddler

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Header>
        <work:WorkContext xmlns:work="http://oracle.com/weblogic/soap/workarea/">rO0...AAA</work:WorkContext>
    </S:Header>
    <S:Body>
        <ns0:viewHoldsListResponse xmlns:ns0="http://www.openuri.org/">
            <ns0:viewHoldsListResult>
                <ns0:TotalAmount>130.0</ns0:TotalAmount>
                <ns0:NumberOfHolds>4</ns0:NumberOfHolds>
                <ns0:listOfHolds>
                    <ns0:item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns0:holdDetails">
                        <ns0:xsiType>HoldDetails</ns0:xsiType>
                        <ns0:Amount>100.0</ns0:Amount>
                        <ns0:StartDate>2014-02-15T00:00:00.0</ns0:StartDate>
                        <ns0:ExpiryDate>2014-02-20T00:00:00.0</ns0:ExpiryDate>
                        <ns0:Description>For testing</ns0:Description>
                        <ns0:Instruction/>
                        <ns0:Tracer>00000810000287294002</ns0:Tracer>
                        <ns0:HoldId>3591376655</ns0:HoldId>
                        <ns0:EmployeeId>0</ns0:EmployeeId>
                    </ns0:item>
                    <ns0:item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns0:holdDetails">
                        <ns0:xsiType>HoldDetails</ns0:xsiType>
                        <ns0:Amount>10.0</ns0:Amount>
                        <ns0:StartDate>2014-02-15T00:00:00.0</ns0:StartDate>
                        <ns0:ExpiryDate>2014-02-17T00:00:00.0</ns0:ExpiryDate>
                        <ns0:Description>DESC</ns0:Description>
                        <ns0:Instruction/>
                        <ns0:Tracer>00000810000287294004</ns0:Tracer>
                        <ns0:HoldId>3591376656</ns0:HoldId>
                        <ns0:EmployeeId>0</ns0:EmployeeId>
                    </ns0:item>
                </ns0:listOfHolds>
            </ns0:viewHoldsListResult>
        </ns0:viewHoldsListResponse>
    </S:Body>
</S:Envelope>

I have faced a similar problem before and the problem was a missing xmlns attribute on one of the tags. In this case I am suspecting the extra <ns0:xsiType>HoldDetails</ns0:xsiType> tag that is coming under the <ns0:item> tag.

Update Even after the web service provider removed the extra <xsiType> tag, I am unable to read the listOfHolds .

My questions are:

  • Can I do anything in my .Net code so that I get the intended value for listOfHolds ?
  • Can I suggest any change to the owner of the Java web service?
  • [Optional] Why NumberOfHolds is being successfully read from the response but not listOfHolds ?

The vendor of the web service has made a change. They changed xsi:type="ns0:holdDetails" to xsi:type="ns0:HoldDetails" (H instead of h).

The point is in Java, and unlike .Net as far as I can tell, they have a control over the generated XML from the web service.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM