I have an architecture of IS 6.0.1, Broker 6.0.1 and an old Enterprise-style adapter connected to this broker.
When IS does publishAndWait to the Broker and the adapter fails processing the requests it delivers back Adapter::error. This is fine, the event has all the error information I need. However from IS service I see no way of getting the contents of the Adapter::error event. The only error message that I am able to get is
com.wm.app.b2b.server.ServiceException: [ISS.0098.9021] Received incorrect document as Reply. Expecting … and received Adapter::error
Does anybody know a way around this? Should there be a different error handling approach? E.g. to catch exception on adapter side and send the error information in a reply document?
I am encountering exactly the same problem.
I would like to find a way to retrieve the actual error message in the original AdapterException (thrown by my Enterprise Integration Component).
I tried not filling the optional parameter “receiveDocumentTypeName” of publishAndWait. In this way, I can still handle the “success” case,
but the Adapter::error document still causes a ServiceException to be thrown by publishAndWait. Unfortunately, the associated error message just reads in this case:
com.wm.app.b2b.server.ServiceException: [ISS.0098.9021] Received incorrect document as Reply. Expecting null and received Adapter::error
and the message of the exception thrown by the Integration Component does not appear at all (even in the “nestedErrorInfo” structure).
Please advise about a way to handle this situation synchronously (i.e. without setting up a triggered service to handle Adapter::error).
So I was looking into this issue and I found the following in the IS Building Integrations guide under the publishAndWait service:
If you do not specify a receiveDocumentTypeName value, the service uses the first reply document of any type that it receives. (The value of the tag field in the envelope of the reply document must match the tag in the envelope of the published document.) The Integration Server discards any other reply documents it receives.
The idea here would be that you don’t specify the document type for the reply, then you check the type yourself with a branch statement. If it’s the right type, move on with your code; otherwise, handle the error.
All good in theory, but there’s a few snags. First, the document type doesn’t appear anywhere in the envelope field when you have IS 6.0.1 components on both ends. (I didn’t test with 4.x/5.0 components on the reply end, so I’m not sure if they provide this value or not.) You can set the optional envelope fields yourself, so I used pubDistinguishedName and set it to the reply document type name when sending my reply document. This means I can identify the correct reply, but any other documents received are not identifiable by type.
Second, the 6.0.1 error document (pub.publish.notification:error) always throws an exception, even when you leave the receiveDocumentTypeName value blank. I get the following error:
[ISS.0098.9021] Received incorrect document as Reply. Expecting null and received pub.publish.notification:error
Obviously this is wrong - I should be getting that error reply as my returned document, not an exception. I haven’t yet reported this to webMethods as a bug, but unless someone can point out a mistake I’ve made, I’ll be doing so soon.
Hi Skip,
I don’t think there is any mistake in what you did and I definitely agree that it should be reported to wM.
I can also add that you can catch the exception thrown as a result of Adpter::error reply. I did put the pubishAndWait in a try/catch (SEQUENCE more precisely) and I caught the exception. But even then I cannot get the error message that comes in the Adapter::error document. The only text I managed to get is this “Received incorrect document as Reply. Expecting null and received pub.publish.notification:error”.