Я пишу веб-сервис SOAP Node.js, используя node-soap, и не могу понять как правильно сформулировать ответ.
Я интегрирую веб-приложение с QuickBooks 2013 с помощью веб-коннектора. Клиент сделает запрос на аутентификацию, и я могу зарегистрировать переданные аргументы, поэтому я знаю, что он вызывается, но я не могу получить правильный ответ.
В документации говорится, что в качестве ответа ожидается массив строк. Соответствующие части WSDL выглядят так:
<s:element name="authenticateResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="authenticateResult" type="tns:ArrayOfString" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ArrayOfString">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string" />
</s:sequence>
</s:complexType>
<wsdl:message name="authenticateSoapOut">
<wsdl:part name="parameters" element="tns:authenticateResponse" />
</wsdl:message>
<wsdl:operation name="authenticate">
<wsdl:input message="tns:authenticateSoapIn" />
<wsdl:output message="tns:authenticateSoapOut" />
</wsdl:operation>
<wsdl:operation name="authenticate">
<soap:operation soapAction="http://developer.intuit.com/authenticate" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
Я испробовал множество различных способов настройки объекта ответа, но клиент продолжает получать сообщения об ошибках (QuickBooks Web Connector)
У меня есть JavaScript:
var myService = {
'QBWebConnectorSvc': {
'QBWebConnectorSvcSoap': {
authenticate: function(args) {
//i have tried many variations of nesting arrays/objects etc.
var toReturn = {
"ArrayOfString":[guid()," "," "," "]
};
return toReturn;
}
}
}
}
var xml = require('fs').readFileSync('qbwc.wsdl', 'utf8'),
server = http.createServer(function(request,response) {
response.end("404: Not Found: "+request.url)
});
server.listen(8000);
soap.listen(server, '/wsdl', myService, xml);
Каким-то образом мне нужно построить «ArrayOfString», но я понятия не имею, как это сделать; Я новичок во всем, что касается мыла.
node-soap
, я полностью переписал синтаксический анализатор WSDL с нуля, чтобы разобраться с ним. Но я не пишу сервер, я не знаю, та ли это проблема, с которой вы сталкиваетесь, но это кажется вероятным. Способ, которымnode-soap
преобразует литерал объекта в XML, довольно прост, а пространство имен — нет. - person Jason   schedule 26.02.2014objectToXML
(к счастью!) - person JohnB   schedule 26.02.2014objectToXML
не позволяет назначить пространство имен любому элементу, вложенному ниже первого дочернего элемента элемента body, а также не позволяет вам установить более одного пространства имен для этого первого дочернего элемента. Это было критическим ограничением в моем приложении, но, похоже, оно не для QuickBooks. - person Jason   schedule 26.02.2014