SOAP Error Hell

422 views
Skip to first unread message

Minikiev

unread,
Mar 12, 2010, 7:19:39 AM3/12/10
to InterSystems: Zen Community, pete....@nhs.net
If anyone can help this would be most appreaciated.
We had a web service within our application (TRAK) which hooked into a
Zen application which was working, there was a slight modification to
the WSDL and an upgrade of the .net framewark on the destination
server. which then generated this following error.

ERROR #5001: <ZSOAP>zInvokeClient+349^websrv.eAssessWS.wsMethodsSoap.1

SOURCE ELEMENT: LTD.ComponentLibrary.ListWithNavBar (eAssessPatList)


Its looks like its the SearchAndGetPersonDetails Method thats failing,
it logs into the service and logs out okay.
debugging in studio is proving fruitless.

HEEEEEELLLLLLPPPPPP PLease


Class websrv.eAssessWS.wsMethodsSoap Extends %SOAP.WebClient
[ ProcedureBlock ]
{

/// This is the URL used to access the web service.
Parameter LOCATION = "http://*****/eAssessServices/
eAssessServices.Services/wsMethods.asmx";

/// This is the namespace used by the Service
Parameter NAMESPACE = "http://eAssessServices.Services/";

/// Use xsi:type attribute for literal types.
Parameter OUTPUTTYPEATTRIBUTE = 1;

/// This is the name of the Service
Parameter SERVICENAME = "wsMethods";

/// Headers expected in the response message.
Parameter SOAPHEADERS =
"UserCredentialsHeader:websrv.eAssessWS.UserCredentialsHeader";

/// This service supports both SOAP 1.1 and SOAP 1.2.
Parameter SOAPVERSION;

Method InsertReferral(referralSO As websrv.eAssessWS.ReferralSO) As
%String [ Final, ProcedureBlock = 1, SoapBindingStyle = document,
SoapBodyUse = literal, WebMethod ]
{
Quit ..WebMethod("InsertReferral").Invoke(##this,"http://
eAssessServices.Services/InsertReferral",.referralSO)
}

Method LogOut() As %String [ Final, ProcedureBlock = 1,
SoapBindingStyle = document, SoapBodyUse = literal, WebMethod ]
{
Quit ..WebMethod("LogOut").Invoke(##this,"http://
eAssessServices.Services/LogOut")
}

Method RegisterTrakUser(trakRegSO As websrv.eAssessWS.TrakRegisterSO)
As %Boolean [ Final, ProcedureBlock = 1, SoapBindingStyle = document,
SoapBodyUse = literal, WebMethod ]
{
Quit ..WebMethod("RegisterTrakUser").Invoke(##this,"http://
eAssessServices.Services/RegisterTrakUser",.trakRegSO)
}

Method SearchAndGetPersonDetails(findPersonSO As
websrv.eAssessWS.FindPersonSO) As
%ListOfObjects(ELEMENTTYPE="websrv.eAssessWS.PersonResultSO",XMLITEMNAME="PersonResultSO",XMLNAME="SearchAndGetPersonDetailsResult")
[ Final, ProcedureBlock = 1, SoapBindingStyle = document, SoapBodyUse
= literal, WebMethod ]
{
Quit ..WebMethod("SearchAndGetPersonDetails").Invoke(##this,"http://
eAssessServices.Services/SearchAndGetPersonDetails",.findPersonSO)
}

Method SearchPersonsReferrals(personId As %xsd.int) As
%ListOfObjects(ELEMENTTYPE="websrv.eAssessWS.ReferralResultSO",XMLITEMNAME="ReferralResultSO",XMLNAME="SearchPersonsReferralsResult")
[ Final, ProcedureBlock = 1, SoapBindingStyle = document, SoapBodyUse
= literal, WebMethod ]
{
Quit ..WebMethod("SearchPersonsReferrals").Invoke(##this,"http://
eAssessServices.Services/SearchPersonsReferrals",.personId)
}

Method TrakLogin(trakLogin As websrv.eAssessWS.LoginSO) As %String
[ Final, ProcedureBlock = 1, SoapBindingStyle = document, SoapBodyUse
= literal, WebMethod ]
{
Quit ..WebMethod("TrakLogin").Invoke(##this,"http://
eAssessServices.Services/TrakLogin",.trakLogin)
}

}

Bill McCormick

unread,
Mar 12, 2010, 7:44:06 AM3/12/10
to intersys...@googlegroups.com, pete....@nhs.net
!st thing to check

%zobjlasterror whenever you get a <ZSOAP> fault. Typically this will tell you the underlying cause.

> --
> You received this message because you are subscribed to the Google Groups "InterSystems: Zen Community" group.
> To post to this group, send email to InterSys...@googlegroups.com
> To unsubscribe from this group, send email to InterSystems-Z...@googlegroups.com
> For more options, visit this group at http://groups.google.com/group/InterSystems-ZEN?hl=en
> Zen Community Terms and Conditions: http://groups.google.com/group/InterSystems-ZEN/web/community-terms-and-conditions

Bill McCormick

unread,
Mar 12, 2010, 7:47:49 AM3/12/10
to intersys...@googlegroups.com, pete....@nhs.net
%objlasterror - typo


On Mar 12, 2010, at 7:19 AM, Minikiev wrote:

Minikiev

unread,
Mar 12, 2010, 9:12:21 AM3/12/10
to InterSystems: Zen Community
Im getting this from the terminal, dont understand, im settings all
the properties in the object, nothing has changed :(

d $System.OBJ.DisplayError(%objlasterror)

ERROR #6248: SOAP response is a SOAP fault: faultcode=Server
faultstring=Server was unable to process request. ---> Object
reference not set to an instance of an object.
faultactor=
detail=

w %objlasterror
0 å h – faultcode=Server
faultstring=Server was unable to process request. ---> Object
reference not set to an instance of an object.
faultactor=
detail= B zProcessSOAPEnvelope+80^websrv.eAssessWS.wsMethodsSoap.
1:LTD-DEV

Neerav Verma

unread,
Mar 12, 2010, 10:09:00 AM3/12/10
to intersys...@googlegroups.com
This past week I had a really bad time with a webservice as well. I changed one thing in the incoming message and that message was carried on to different methods later and at one point i forgot to change that param to new one
So the webservice wasn't telling me that the property does not exist but kept on throwing error with basically no fault

So what I did I went through and started setting globals after every line and thus knew where exactly it is failing

set ^Test(1) = yourvalue
set ^Test(2) = yourvalue

And then in SMP you can look for global Test and verify at what point its failing

Thank You,

Neerav Verma
http://www.linkedin.com/in/vneerav
------------------------------------------------------


Bill McCormick

unread,
Mar 12, 2010, 10:23:13 AM3/12/10
to intersys...@googlegroups.com
Given the error below that is .Net problem. 

Whatever changed in their WSDL they have an internal problem. That error means the .net web service was not able to process what you sent it. 

Alex Schaefer

unread,
Mar 12, 2010, 10:25:33 AM3/12/10
to intersys...@googlegroups.com

I’d get a tcpTrace and maybe get one from .NET as well to compare.

 


Minikiev

unread,
Mar 12, 2010, 3:49:01 PM3/12/10
to InterSystems: Zen Community
Thanks Alex good suggestions we cant use that software in here
though.
We did get to the bottom of it though and as suggested it was a .net
error.

It would be good though to put some error trapping at my end, its
allready implemented at the .net end

Has anyone ever used this (Copied from the Zen documentation)

Im not sure how to go about coding this.

>>logging the SOAP Calls
>>To log the SOAP calls made to or from a Caché namespace, set the following nodes of the ^ISCSOAP global:
>>ISCSOAP("Log") Specifies kind of logging. Use one of the following values:
>>"i" — General input information
>>"o" — General input information
>>"s" — Security information
>>You can also use a string that contains any combination of these values, for example: "ios"
>>^ISCSOAP("LogFile") Specifies the complete path and filename of the log file to create.

Alex Schaefer

unread,
Mar 13, 2010, 6:41:01 AM3/13/10
to intersys...@googlegroups.com
ISCSOAP is a great tool for debugging but not really for error trapping - is that what you are looking at?

-----Original Message-----
From: intersys...@googlegroups.com [mailto:intersys...@googlegroups.com] On Behalf Of Minikiev
Sent: Friday, March 12, 2010 3:49 PM
To: InterSystems: Zen Community
Subject: [InterSystems-Zen] Re: SOAP Error Hell

Thanks Alex good suggestions we cant use that software in here
though.
We did get to the bottom of it though and as suggested it was a .net
error.

It would be good though to put some error trapping at my end, its
allready implemented at the .net end

Has anyone ever used this (Copied from the Zen documentation)

Im not sure how to go about coding this.

>>logging the SOAP Calls
>>To log the SOAP calls made to or from a Caché namespace, set the following nodes of the ^ISCSOAP global:
>>ISCSOAP("Log") Specifies kind of logging. Use one of the following values:

>>"i" - General input information
>>"o" - General input information
>>"s" - Security information


>>You can also use a string that contains any combination of these values, for example: "ios"
>>^ISCSOAP("LogFile") Specifies the complete path and filename of the log file to create.

--

Plenderleith, Daniel

unread,
Mar 13, 2010, 10:24:48 AM3/13/10
to intersys...@googlegroups.com
Both Ideally.


Thanks


Dan

Daniel Plenderleith
Application Developer
E-Health Department
Residency Block 3/7
1st Floor
St Johns Hospital
Howden
Livingston
EH54 6PP
Internal Telephone: 53491

*****************************************************************
The information contained in this message may be confidential or
legally privileged and is intended for the addressee only. If you
have received this message in error or there are any problems
please notify the originator immediately. The unauthorised use,
disclosure, copying or alteration of this message is
strictly forbidden.
*****************************************************************

Alex Schaefer

unread,
Mar 13, 2010, 10:32:10 AM3/13/10
to intersys...@googlegroups.com
Hi Dan,

For error trapping on the service side you'd be using standard SOAP faults - on the client side you can use try/catch or old school ZTRAP error trapping to trap the incoming faults and check for SOAP faults specifically - the documentation should explain both of these.

ISCSOAP will log incoming and outgoing SOAP requests - no modifications to the code are required, you'll just need to set the global to i, o, s or any combination as well as point to a log file somewhere on your local disk.

Hope that helps,
-- Alex

Plenderleith, Daniel

unread,
Mar 13, 2010, 11:02:48 AM3/13/10
to intersys...@googlegroups.com
Good Man thanks Alex
Reply all
Reply to author
Forward
0 new messages