Ошибка при вызове адаптера SOAP в IBM MobileFirst

Я создал HTTP-адаптер и пытаюсь вызвать запрос SOAP. Но я получаю следующую ошибку:

{
   "errors": [
      "White spaces are required between publicId and systemId.",
      "Failed to parse the payload from backend (procedure: HttpRequest)"
   ],
   "info": [
   ],
   "isSuccessful": false,
   "responseHeaders": {
      "Content-Length": "1164",
      "Content-Type": "text\/html; charset=UTF-8",
      "Date": "Mon, 06 Apr 2015 22:16:54 GMT",
      "X-Powered-By": "Servlet\/2.5 JSP\/2.1"
   },
   "responseTime": 869,
   "statusCode": 404,
   "statusReason": "Not Found",
   "totalTime": 910,
   "warnings": [
   ]
}

Я проверил запрос в пользовательском интерфейсе SOAP и получил правильное значение.

**Примечание. Этот wsdl автоматически генерируется продуктом Oracle Customer Care & Billing Product с использованием его базовой службы. **

Я вставляю запрос сюда: http://9.113.129.21:7500/ouaf/XAIApp/xaiserver/CM_GETCURRENTBILL

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cm="http://oracle.com/CM_GETCURRENTBILL.xsd">
   <soapenv:Header/>
   <soapenv:Body>
      <cm:CM_GETCURRENTBILL dateTimeTagFormat="xsd">
         <!--Optional:-->
         <cm:zone>CM-GETBILCNT</cm:zone>
         <!--Optional:-->
         <cm:accountId>?</cm:accountId>
         <!--Zero or more repetitions:-->
         <cm:results>
            <!--Optional:-->
            <cm:billId>?</cm:billId>
         </cm:results>
      </cm:CM_GETCURRENTBILL>
   </soapenv:Body>
</soapenv:Envelope>

При работе с пользовательским интерфейсом SOAP мне нужно указать имя пользователя и пароль, которые я указал в Adapter.xml.

<wl:adapter name="DemoHTTPwithAuthAdapter"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:wl="http://www.ibm.com/mfp/integration"
    xmlns:http="http://www.ibm.com/mfp/integration/http">

    <displayName>DemoHTTPwithAuthAdapter</displayName>
    <description>DemoHTTPwithAuthAdapter</description>
    <connectivity>
        <connectionPolicy xsi:type="http:HTTPConnectionPolicyType">
            <protocol>http</protocol>
            <domain>9.113.129.21</domain>
            <port>7500</port>   
            <connectionTimeoutInMilliseconds>30000</connectionTimeoutInMilliseconds>
            <socketTimeoutInMilliseconds>30000</socketTimeoutInMilliseconds>
            <authentication>
                <basic />
                <serverIdentity>
                    <username>TESTER</username>
                    <password>ibmindia#$</password>
                </serverIdentity>
            </authentication>
            <maxConcurrentConnectionsPerNode>50</maxConcurrentConnectionsPerNode>
            <!-- Following properties used by adapter's key manager for choosing specific certificate from key store  
            <sslCertificateAlias></sslCertificateAlias> 
            <sslCertificatePassword></sslCertificatePassword>
            -->     
        </connectionPolicy>
    </connectivity>
    <procedure name="CM_GETCURRENTBILLService"/>
</wl:adapter>

Также вот мой файл adpater-impl.js.

function CM_GETCURRENTBILLService(accountId) {

    var soapRequest = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cm="http://oracle.com/CM_GETCURRENTBILL.xsd">'
       +'<soapenv:Header/>'
       +'<soapenv:Body>'
          +'<cm:CM_GETCURRENTBILL dateTimeTagFormat="xsd">'
            + '<!--Optional:-->'
            +'<cm:zone>CM-GETBILCNT</cm:zone>'
             +'<!--Optional:-->'
             +'<cm:accountId>'+accountId+'</cm:accountId>'
             +'<!--Zero or more repetitions:-->'
             +'<cm:results>'
               +'<!--Optional:-->'
                +'<cm:billId></cm:billId>'
            +'</cm:results>'
          +'</cm:CM_GETCURRENTBILL>'
       +'</soapenv:Body>'
    +'</soapenv:Envelope>';

    var path="http://oracle.com/CM_GETCURRENTBILL.xsd";

    var input = {
        method : 'post',
        returnedContentType : 'xml',
        path : path,
        headers : {
            'SOAPAction' : 'http://oracle.com/CM_GETCURRENTBILL.xsd/CM_GETCURRENTBILL'
        },
        body : {
            content : soapRequest,
            contentType : 'text/xml; charset=utf-8'
        }
    };

    return WL.Server.invokeHttp(input);
}

person Ayan Bhattacharyya    schedule 06.04.2015    source источник
comment
Вы уверены, что ваш путь является URL-адресом var path="http://oracle.com/CM_GETCURRENTBILL.xsd";, который будет преобразован в запросы, отправленные http://9.113.129.21:7500/http://oracle.com/CM_GETCURRENTBILL.xsd   -  person Yoel Nunez    schedule 06.04.2015
comment
@Yoel Nunez: Большое спасибо .. Я указываю неверный путь. Теперь я получаю правильный результат. Еще раз спасибо !!!   -  person Ayan Bhattacharyya    schedule 07.04.2015


Ответы (2)


Убедитесь, что ваш путь правильный. Из вашего кода у вас есть var path="http://oracle.com/CM_GETCURRENTBILL.xsd";.

Это будет переведено на запросы, сделанные http://9.113.129.21:7500/http://oracle.com/CM_GETCURRENTBILL.xsd

person Yoel Nunez    schedule 07.04.2015

Действие мыла кажется неправильным. Пример действия Soap для службы, созданной OUAF, выглядит так: http://ouaf.oracle.com/spl/XAIXapp/xaiserver/ValidateMeterItemRequest

person RakeshS    schedule 05.05.2016
comment
Добро пожаловать в Stack Overflow! Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. Взгляните на эту статью: Как написать хороший ответ. - person ByteHamster; 05.05.2016
comment
Спасибо, это не ссылка, это строка, используемая в WSDL. - person RakeshS; 05.05.2016