зеркало из https://github.com/mozilla/gecko-dev.git
More bug fixes to SOAP implementation. Not part of default build.
This commit is contained in:
Родитель
cc86cdefbc
Коммит
c003a9e3b0
|
@ -49,9 +49,22 @@ NS_IMETHODIMP nsHTTPSOAPTransport::SyncCall(nsISOAPCall *aCall, nsISOAPResponse
|
|||
nsresult rv;
|
||||
nsCOMPtr<nsIXMLHttpRequest> request;
|
||||
|
||||
nsCOMPtr<nsIDOMDocument> messageDocument;
|
||||
rv = aCall->GetMessage(getter_AddRefs(messageDocument));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!messageDocument) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
request = do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsAutoString uri;
|
||||
rv = aCall->GetTransportURI(uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (AStringIsNull(uri)) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
rv = request->OpenRequest("POST", NS_ConvertUCS2toUTF8(uri).get(), PR_FALSE, nsnull, nsnull);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsAutoString action;
|
||||
rv = aCall->GetActionURI(action);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
@ -60,19 +73,6 @@ NS_IMETHODIMP nsHTTPSOAPTransport::SyncCall(nsISOAPCall *aCall, nsISOAPResponse
|
|||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
|
||||
nsAutoString uri;
|
||||
rv = aCall->GetTransportURI(uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!AStringIsNull(uri)) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsCOMPtr<nsIDOMDocument> messageDocument;
|
||||
rv = aCall->GetMessage(getter_AddRefs(messageDocument));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!messageDocument) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
rv = request->OpenRequest("POST", NS_ConvertUCS2toUTF8(uri).get(), PR_FALSE, nsnull, nsnull);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsIWritableVariant> variant = do_CreateInstance(NS_VARIANT_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
|
@ -100,6 +100,7 @@ class nsHTTPSOAPTransportCompletion : public nsIDOMEventListener
|
|||
{
|
||||
public:
|
||||
nsHTTPSOAPTransportCompletion();
|
||||
nsHTTPSOAPTransportCompletion(nsISOAPCall *call, nsISOAPResponse *response, nsIXMLHttpRequest *request, nsISOAPResponseListener *listener);
|
||||
virtual ~nsHTTPSOAPTransportCompletion();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
@ -120,6 +121,13 @@ nsHTTPSOAPTransportCompletion::nsHTTPSOAPTransportCompletion()
|
|||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
}
|
||||
nsHTTPSOAPTransportCompletion::nsHTTPSOAPTransportCompletion(
|
||||
nsISOAPCall *call,
|
||||
nsISOAPResponse *response,
|
||||
nsIXMLHttpRequest *request,
|
||||
nsISOAPResponseListener *listener):
|
||||
mCall(call), mResponse(response), mRequest(request), mListener(listener) {}
|
||||
|
||||
nsHTTPSOAPTransportCompletion::~nsHTTPSOAPTransportCompletion()
|
||||
{
|
||||
}
|
||||
|
@ -128,7 +136,7 @@ nsHTTPSOAPTransportCompletion::HandleEvent(nsIDOMEvent* aEvent)
|
|||
{
|
||||
nsresult rv;
|
||||
mRequest->GetStatus(&rv);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
if (mResponse && NS_SUCCEEDED(rv)) {
|
||||
nsCOMPtr<nsIDOMDocument> document;
|
||||
rv = mRequest->GetResponseXML(getter_AddRefs(document));
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
|
@ -148,10 +156,23 @@ NS_IMETHODIMP nsHTTPSOAPTransport::AsyncCall(nsISOAPCall *aCall, nsISOAPResponse
|
|||
nsresult rv;
|
||||
nsCOMPtr<nsIXMLHttpRequest> request;
|
||||
|
||||
nsCOMPtr<nsIDOMDocument> messageDocument;
|
||||
rv = aCall->GetMessage(getter_AddRefs(messageDocument));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!messageDocument) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
request = do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> eventTarget = do_QueryInterface(request, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
request = do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv);
|
||||
nsAutoString uri;
|
||||
rv = aCall->GetTransportURI(uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (AStringIsNull(uri)) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
rv = request->OpenRequest("POST", NS_ConvertUCS2toUTF8(uri).get(), PR_TRUE, nsnull, nsnull);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsAutoString action;
|
||||
|
@ -161,24 +182,16 @@ NS_IMETHODIMP nsHTTPSOAPTransport::AsyncCall(nsISOAPCall *aCall, nsISOAPResponse
|
|||
rv = request->SetRequestHeader("SOAPAction", NS_ConvertUCS2toUTF8(action).get());
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
nsCOMPtr<nsIDOMEventListener> listener = new nsHTTPSOAPTransportCompletion();
|
||||
if (!listener) return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
nsAutoString uri;
|
||||
rv = aCall->GetTransportURI(uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!AStringIsNull(uri)) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsCOMPtr<nsIDOMDocument> messageDocument;
|
||||
rv = aCall->GetMessage(getter_AddRefs(messageDocument));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!messageDocument) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
rv = request->OpenRequest("POST", NS_ConvertUCS2toUTF8(uri).get(), PR_TRUE, nsnull, nsnull);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
eventTarget->AddEventListener(NS_LITERAL_STRING("load"), listener, PR_FALSE);
|
||||
eventTarget->AddEventListener(NS_LITERAL_STRING("error"), listener, PR_FALSE);
|
||||
if (aListener) {
|
||||
nsCOMPtr<nsIDOMEventListener> listener;
|
||||
listener = new nsHTTPSOAPTransportCompletion(aCall, aResponse, request, aListener);
|
||||
if (!listener) return NS_ERROR_OUT_OF_MEMORY;
|
||||
rv = eventTarget->AddEventListener(NS_LITERAL_STRING("load"), listener, PR_FALSE);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
rv = eventTarget->AddEventListener(NS_LITERAL_STRING("error"), listener, PR_FALSE);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIWritableVariant> variant = do_CreateInstance(NS_VARIANT_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
|
|
@ -7,13 +7,13 @@
|
|||
|
||||
// Passed in as the response handler in the asynchronous case
|
||||
// and called directly (see below) in the synchronous case
|
||||
function onresponse(resp, call) {
|
||||
function handleResponse(resp, call, status, end) {
|
||||
if (resp == null) {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Was there a SOAP fault in the response?
|
||||
if (resp.generatedFault()) {
|
||||
if (resp.fault != null) {
|
||||
var f = resp.fault;
|
||||
var detail = f.detail;
|
||||
var ds = new XMLSerializer();
|
||||
|
@ -21,8 +21,11 @@ function onresponse(resp, call) {
|
|||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||
}
|
||||
else {
|
||||
var ret = resp.returnValue;
|
||||
var val = ret.value;
|
||||
function Count() {
|
||||
}
|
||||
var count = new Count();
|
||||
var ret = resp.getParameters(false, count);
|
||||
var val = ret[0].value;
|
||||
var retStr = "Success:\nName: " + ret.name + "\nValue: " + val;
|
||||
// In this case, we happen to know that the result value is an array
|
||||
// and the 5th parameter is a struct.
|
||||
|
@ -33,6 +36,7 @@ function onresponse(resp, call) {
|
|||
}
|
||||
alert(retStr);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function makeCall(syncCall, faultCall) {
|
||||
|
@ -70,14 +74,14 @@ function makeCall(syncCall, faultCall) {
|
|||
// the last parameter is an object that will be serialized into
|
||||
// a struct parameter. It does not have a parameter wrapper because
|
||||
// we don't need it to be named
|
||||
s.encode("GetLastTradePrice", "uri:some-namespace", 0, null, 5, new Array(5, p1, p2, p3, p4, new SOAPParameter(new Dog("Fido", "Lab", "Black"))));
|
||||
s.encode("GetLastTradePrice", "uri:some-namespace", 0, null, 3, new Array(p1, p2, p3, p4, new SOAPParameter(new Dog("Fido", "Lab", "Black"))));
|
||||
|
||||
if (syncCall) {
|
||||
var r = s.invoke();
|
||||
onresponse(r, s);
|
||||
handleResponse(r, s, 0, true);
|
||||
}
|
||||
else {
|
||||
s.asyncInvoke(onresponse);
|
||||
s.asyncInvoke(handleResponse);
|
||||
}
|
||||
}
|
||||
</SCRIPT>
|
||||
|
|
|
@ -49,9 +49,22 @@ NS_IMETHODIMP nsHTTPSOAPTransport::SyncCall(nsISOAPCall *aCall, nsISOAPResponse
|
|||
nsresult rv;
|
||||
nsCOMPtr<nsIXMLHttpRequest> request;
|
||||
|
||||
nsCOMPtr<nsIDOMDocument> messageDocument;
|
||||
rv = aCall->GetMessage(getter_AddRefs(messageDocument));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!messageDocument) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
request = do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsAutoString uri;
|
||||
rv = aCall->GetTransportURI(uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (AStringIsNull(uri)) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
rv = request->OpenRequest("POST", NS_ConvertUCS2toUTF8(uri).get(), PR_FALSE, nsnull, nsnull);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsAutoString action;
|
||||
rv = aCall->GetActionURI(action);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
@ -60,19 +73,6 @@ NS_IMETHODIMP nsHTTPSOAPTransport::SyncCall(nsISOAPCall *aCall, nsISOAPResponse
|
|||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
|
||||
nsAutoString uri;
|
||||
rv = aCall->GetTransportURI(uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!AStringIsNull(uri)) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsCOMPtr<nsIDOMDocument> messageDocument;
|
||||
rv = aCall->GetMessage(getter_AddRefs(messageDocument));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!messageDocument) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
rv = request->OpenRequest("POST", NS_ConvertUCS2toUTF8(uri).get(), PR_FALSE, nsnull, nsnull);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsIWritableVariant> variant = do_CreateInstance(NS_VARIANT_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
|
@ -100,6 +100,7 @@ class nsHTTPSOAPTransportCompletion : public nsIDOMEventListener
|
|||
{
|
||||
public:
|
||||
nsHTTPSOAPTransportCompletion();
|
||||
nsHTTPSOAPTransportCompletion(nsISOAPCall *call, nsISOAPResponse *response, nsIXMLHttpRequest *request, nsISOAPResponseListener *listener);
|
||||
virtual ~nsHTTPSOAPTransportCompletion();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
@ -120,6 +121,13 @@ nsHTTPSOAPTransportCompletion::nsHTTPSOAPTransportCompletion()
|
|||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
}
|
||||
nsHTTPSOAPTransportCompletion::nsHTTPSOAPTransportCompletion(
|
||||
nsISOAPCall *call,
|
||||
nsISOAPResponse *response,
|
||||
nsIXMLHttpRequest *request,
|
||||
nsISOAPResponseListener *listener):
|
||||
mCall(call), mResponse(response), mRequest(request), mListener(listener) {}
|
||||
|
||||
nsHTTPSOAPTransportCompletion::~nsHTTPSOAPTransportCompletion()
|
||||
{
|
||||
}
|
||||
|
@ -128,7 +136,7 @@ nsHTTPSOAPTransportCompletion::HandleEvent(nsIDOMEvent* aEvent)
|
|||
{
|
||||
nsresult rv;
|
||||
mRequest->GetStatus(&rv);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
if (mResponse && NS_SUCCEEDED(rv)) {
|
||||
nsCOMPtr<nsIDOMDocument> document;
|
||||
rv = mRequest->GetResponseXML(getter_AddRefs(document));
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
|
@ -148,10 +156,23 @@ NS_IMETHODIMP nsHTTPSOAPTransport::AsyncCall(nsISOAPCall *aCall, nsISOAPResponse
|
|||
nsresult rv;
|
||||
nsCOMPtr<nsIXMLHttpRequest> request;
|
||||
|
||||
nsCOMPtr<nsIDOMDocument> messageDocument;
|
||||
rv = aCall->GetMessage(getter_AddRefs(messageDocument));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!messageDocument) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
request = do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> eventTarget = do_QueryInterface(request, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
request = do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv);
|
||||
nsAutoString uri;
|
||||
rv = aCall->GetTransportURI(uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (AStringIsNull(uri)) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
rv = request->OpenRequest("POST", NS_ConvertUCS2toUTF8(uri).get(), PR_TRUE, nsnull, nsnull);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsAutoString action;
|
||||
|
@ -161,24 +182,16 @@ NS_IMETHODIMP nsHTTPSOAPTransport::AsyncCall(nsISOAPCall *aCall, nsISOAPResponse
|
|||
rv = request->SetRequestHeader("SOAPAction", NS_ConvertUCS2toUTF8(action).get());
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
nsCOMPtr<nsIDOMEventListener> listener = new nsHTTPSOAPTransportCompletion();
|
||||
if (!listener) return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
nsAutoString uri;
|
||||
rv = aCall->GetTransportURI(uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!AStringIsNull(uri)) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsCOMPtr<nsIDOMDocument> messageDocument;
|
||||
rv = aCall->GetMessage(getter_AddRefs(messageDocument));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!messageDocument) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
rv = request->OpenRequest("POST", NS_ConvertUCS2toUTF8(uri).get(), PR_TRUE, nsnull, nsnull);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
eventTarget->AddEventListener(NS_LITERAL_STRING("load"), listener, PR_FALSE);
|
||||
eventTarget->AddEventListener(NS_LITERAL_STRING("error"), listener, PR_FALSE);
|
||||
if (aListener) {
|
||||
nsCOMPtr<nsIDOMEventListener> listener;
|
||||
listener = new nsHTTPSOAPTransportCompletion(aCall, aResponse, request, aListener);
|
||||
if (!listener) return NS_ERROR_OUT_OF_MEMORY;
|
||||
rv = eventTarget->AddEventListener(NS_LITERAL_STRING("load"), listener, PR_FALSE);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
rv = eventTarget->AddEventListener(NS_LITERAL_STRING("error"), listener, PR_FALSE);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIWritableVariant> variant = do_CreateInstance(NS_VARIANT_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
|
|
@ -7,13 +7,13 @@
|
|||
|
||||
// Passed in as the response handler in the asynchronous case
|
||||
// and called directly (see below) in the synchronous case
|
||||
function onresponse(resp, call) {
|
||||
function handleResponse(resp, call, status, end) {
|
||||
if (resp == null) {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Was there a SOAP fault in the response?
|
||||
if (resp.generatedFault()) {
|
||||
if (resp.fault != null) {
|
||||
var f = resp.fault;
|
||||
var detail = f.detail;
|
||||
var ds = new XMLSerializer();
|
||||
|
@ -21,8 +21,11 @@ function onresponse(resp, call) {
|
|||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||
}
|
||||
else {
|
||||
var ret = resp.returnValue;
|
||||
var val = ret.value;
|
||||
function Count() {
|
||||
}
|
||||
var count = new Count();
|
||||
var ret = resp.getParameters(false, count);
|
||||
var val = ret[0].value;
|
||||
var retStr = "Success:\nName: " + ret.name + "\nValue: " + val;
|
||||
// In this case, we happen to know that the result value is an array
|
||||
// and the 5th parameter is a struct.
|
||||
|
@ -33,6 +36,7 @@ function onresponse(resp, call) {
|
|||
}
|
||||
alert(retStr);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function makeCall(syncCall, faultCall) {
|
||||
|
@ -70,14 +74,14 @@ function makeCall(syncCall, faultCall) {
|
|||
// the last parameter is an object that will be serialized into
|
||||
// a struct parameter. It does not have a parameter wrapper because
|
||||
// we don't need it to be named
|
||||
s.encode("GetLastTradePrice", "uri:some-namespace", 0, null, 5, new Array(5, p1, p2, p3, p4, new SOAPParameter(new Dog("Fido", "Lab", "Black"))));
|
||||
s.encode("GetLastTradePrice", "uri:some-namespace", 0, null, 3, new Array(p1, p2, p3, p4, new SOAPParameter(new Dog("Fido", "Lab", "Black"))));
|
||||
|
||||
if (syncCall) {
|
||||
var r = s.invoke();
|
||||
onresponse(r, s);
|
||||
handleResponse(r, s, 0, true);
|
||||
}
|
||||
else {
|
||||
s.asyncInvoke(onresponse);
|
||||
s.asyncInvoke(handleResponse);
|
||||
}
|
||||
}
|
||||
</SCRIPT>
|
||||
|
|
Загрузка…
Ссылка в новой задаче