SOAP returns data, but C # indicates a null response

My C # application will give me nothing but null results for SOAP calls.

We released some PeopleSoft ERP data using the SOAP web service.

I am accessing this SOAP service from a Visual Studio 2012 ASP.NET C # application. I have a Service Reference named CampusDirectoryService built using the WSDL generated by ERP.

Here's the C # code:

var service = new CampusDirectoryService.TEST_PortTypeClient(); var input = new CampusDirectoryService.InputParameters(); input.First_Name = FirstNameBox.Text; input.Last_Name = LastNameBox.Text; var returnData = service.TEST_OP(input); 

The returnData problem returnData always zero. Through Wireshark, I confirmed that I am actually getting a valid SOAP response with the data. returnData must not be null.

I confirmed the correct valid results from the SOAP service through soapUI . By sending the same SOAP request that .NET sends (I copied it from Wireshark), I get the expected results.

Here's the SOAP request:

 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <InputParameters xmlns="http://xmlns.oracle.com/Enterprise/Tools/schemas"> <Last_Name xmlns="">cambre</Last_Name> <First_Name xmlns="">aren</First_Name> </InputParameters> </s:Body> </s:Envelope> 

Here's the SOAP response, with some internal data inside the ReturnID element, confused or deleted:

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <root xmlns="http://peoplesoft.com/rootResponse"> <ReturnID> <PRF_Name>Cambre,Aren</PRF_Name> <Camp_Email> valid@email.com </Camp_Email> </ReturnID> </root> </soapenv:Body> </soapenv:Envelope> 

The method return type is TEST_OP CampusDirectoryService.rootReturnID[] .

Why is returnData always null?

UPDATE For comment, I checked the posts using soapUI. He curses the answer with this message:

line -1: missing part of the message with the name [{ http://xmlns.oracle.com/Enterprise/Tools/schemas } root]

Here is the XSD for the answer:

 <?xml version="1.0" encoding="utf-8"?> <xs:schema targetNamespace="http://xmlns.oracle.com/Enterprise/Tools/schemas" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="ReturnID"> <xs:complexType> <xs:sequence> <xs:element name="PRF_Name" type="xs:string" /> <xs:element name="Camp_Email" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 

Is the XSD supposed to check that soapenv:Body inside, or should it check the whole response, including soapenv:Envelope and soapenv:Body elements? It seems like soapUI expects XSD to check the whole response, not just what's inside soapenv:Body .

Here's the WSDL:

 <wsdl:definitions name="TEST.1" targetNamespace="http://xmlns.oracle.com/Enterprise/HCM/schemas/TEST.1" xmlns:U_IT_CAMDIR_REQUEST_MSG.VERSION_1="http://xmlns.oracle.com/Enterprise/Tools/schemas" xmlns:U_IT_CAMDIR_RESPONSE_MSG.VERSION_1="http://xmlns.oracle.com/Enterprise/Tools/schemas" xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://xmlns.oracle.com/Enterprise/HCM/schemas/TEST.1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2002/12/policy"> <wsp:UsagePolicy wsdl:Required="true"/> <plnk:partnerLinkType name="TEST_PartnerLinkType"> <plnk:role name="TEST_Provider"> <plnk:portType name="tns:TEST_PortType"/> </plnk:role> </plnk:partnerLinkType> <wsdl:types> <xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:import namespace="http://xmlns.oracle.com/Enterprise/Tools/schemas" schemaLocation="U_IT_CAMDIR_REQUEST_MSG.VERSION_1.xsd"/> <xsd:import namespace="http://xmlns.oracle.com/Enterprise/Tools/schemas" schemaLocation="U_IT_CAMDIR_RESPONSE_MSG.VERSION_1.xsd"/> </xsd:schema> </wsdl:types> <wsdl:message name="U_IT_CAMDIR_REQUEST_MSG.VERSION_1"> <wsdl:documentation>People Directory</wsdl:documentation> <wsdl:part element="U_IT_CAMDIR_REQUEST_MSG.VERSION_1:InputParameters" name="parameter"/> </wsdl:message> <wsdl:message name="U_IT_CAMDIR_RESPONSE_MSG.VERSION_1"> <wsdl:documentation>People Directory</wsdl:documentation> <wsdl:part element="U_IT_CAMDIR_RESPONSE_MSG.VERSION_1:root" name="parameter"/> </wsdl:message> <wsdl:portType name="TEST_PortType"> <wsdl:operation name="TEST_OP"> <wsdl:documentation>TEST</wsdl:documentation> <wsdl:input message="tns:U_IT_CAMDIR_REQUEST_MSG.VERSION_1" name="U_IT_CAMDIR_REQUEST_MSG.VERSION_1"/> <wsdl:output message="tns:U_IT_CAMDIR_RESPONSE_MSG.VERSION_1" name="U_IT_CAMDIR_RESPONSE_MSG.VERSION_1"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="TEST_Binding" type="tns:TEST_PortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="TEST_OP"> <soap:operation soapAction="TEST_OP.v1" style="document"/> <wsp:Policy wsu:Id="UsernameTokenSecurityPolicyPasswordOptional" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsp:ExactlyOne> <wsp:All> <wsse:SecurityToken wsp:Usage="wsp:Required" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsse:TokenType>wsse:UserNameToken</wsse:TokenType> <Claims> <SubjectName MatchType="wsse:Exact"/> <UsePassword wsp:Usage="wsp:Optional"/> </Claims> </wsse:SecurityToken> </wsp:All> </wsp:ExactlyOne> </wsp:Policy> <wsdl:input name="U_IT_CAMDIR_REQUEST_MSG.VERSION_1"> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="literal"/> </wsdl:input> <wsdl:output name="U_IT_CAMDIR_RESPONSE_MSG.VERSION_1"> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="TEST"> <wsdl:documentation>TEST</wsdl:documentation> <wsdl:port binding="tns:TEST_Binding" name="TEST_Port"> <soap:address location="http://domainname.com/longurltoSOAPservicehere"/> </wsdl:port> </wsdl:service> </wsdl:definitions> 
+7
source share
1 answer

Well, I think I found a solution to the same problem. I found that fixed this, there were two main elements that needed to be configured correctly.

  • Be sure to set the namespace in the service (PeopleTools> Integration Broker> Integration Setup> Service). In mine, I used a namespace:

     http://xmlns.oracle.com/Enterprise/EnterprisePortal/services 
  • It is very important how you create your schemas and the namespaces that they use. Each schema requires a special namespace format and message format, based on how PeopleSoft returns the message. For me, I used the following schemes:

    An example request message scheme: (The request message I used was IS_CL_COMPLETEPERCENTAGE_REQ.V1)

      <?xml version="1.0"?> <xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/Enterprise/EnterprisePortal/services/IS_CL_COMPLETEPERCENTAGE_REQ.V1" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="IS_CL_COMPLETEPERCENTAGE_REQ"> <xsd:complexType> <xsd:sequence> <xsd:element name="USER_ID" type="xsd:string"/> <xsd:element name="CHECKLIST_TYPE" type="xsd:string"/> <xsd:element name="CHECKLIST_ID" type="xsd:string"/> <xsd:element name="CHECKLIST_INSTANCE_ID" type="xsd:integer"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> 

    An example of a response message scheme: (The response message I used was IS_CL_COMPLETEPERCENTAGE_RES.V1)

      <?xml version="1.0"?> <xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://peoplesoft.com/IS_CL_COMPLETEPERCENTAGE_RESResponse" xmlns:tns="http://peoplesoft.com/IS_CL_COMPLETEPERCENTAGE_RESResponse" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="IS_CL_COMPLETEPERCENTAGE_RES"> <xsd:complexType> <xsd:sequence> <xsd:element name="PERCENTCOMPLETE" type="xsd:integer"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> 

After publishing my web service using this information, SoapUI confirmed both the request and the response without any problems.

Example SOAP message :

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:is="http://xmlns.oracle.com/Enterprise/EnterprisePortal/services/IS_CL_COMPLETEPERCENTAGE_REQ.V1" xmlns:sch="http://xmlns.oracle.com/Enterprise/Tools/schemas"> <soapenv:Header/> <soapenv:Body> <is:IS_CL_COMPLETEPERCENTAGE_REQ> <is:USER_ID>999999</is:USER_ID> <is:CHECKLIST_TYPE>GRP</is:CHECKLIST_TYPE> <is:CHECKLIST_ID>NEW_HIRE_CHECKLIST</is:CHECKLIST_ID> <is:CHECKLIST_INSTANCE_ID>0</is:CHECKLIST_INSTANCE_ID> </is:IS_CL_COMPLETEPERCENTAGE_REQ> </soapenv:Body> </soapenv:Envelope> 

Example SOAP response :

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <IS_CL_COMPLETEPERCENTAGE_RES xmlns="http://peoplesoft.com/IS_CL_COMPLETEPERCENTAGE_RESResponse"> <PERCENTCOMPLETE>33</PERCENTCOMPLETE> </IS_CL_COMPLETEPERCENTAGE_RES> </soapenv:Body> </soapenv:Envelope> 
+5
source

All Articles