Canononical publish in webmethods 601

Hi,

I have created a Canonical Document which contains many fields in webMethods 6.0.1. My source system is oracle. I am picking the data from the source system and mapping to Canonical and publishing the Canonical.When i am publishing the canonical it is giving an error saying that the values in the canonical fields are absent.I want only few fields in the canonical.I donot want to publish all the fields in the canonical.

I am able to map to only few fields of Canonical and published successfully in Enterprise 4.1.1 and 5.01
successfully.Is there any alternative for this in 6.0.1

[ISS.0098.9007] Data does not conform to the Publishable Document Type
List of errors: Field is absent, field must exist

Any suggestion is appreciated.

Thanks

Check the definition of the doc. The fields most likely have “Must exist at run-time” checked. Uncheck this setting for optional fields.

Thanks Rob, Its working fine after unchecking the field “Must exist at run-time”.

Hi ,
Even after unchecking the required field to false , I get the same error. My document had some fields like @version , * body so while publshing I get a warning saying It may not be recognizable. Could that be the problem ? I am trying to print the value as soon as the subscriber is called. It says
“Copy failed: No source data available: to=/message, from=/requestDoc/TXLife/TXLifeRequest/FIRST_NAME”
If I run the subscriber service with the same input it is working fine.
I understand that in the received (published) document the field (or probably all fields) is null. What goes wrong ??

Any help is appreciated.
Thanks,
Pavithra.

Why dont you make use of Copy Condition while mapping the required fields/All fields, of the final publishable canonical and check once while publishing??

Hi Vijay,
Thanks for your quick response.I am new to WM . Can you tell me a bit clearly what you mean by copy condition ?
Thanks,
Pavithra.

In other words how can I view my document contents after it is published to the broker.

If your using wM6.1, for every pipeline mapping you do, if you click on the mapped line you will find a “CopyCondition” under the Properties Menu. Use it to write the condition.

For Ex:-
If your mapping A to B in the pipeline, A----B, click on the line and check for the Copy Condition property under the Properties Menu. Use the following to check for the NULL value, (%/A% and %/A%!=“”) to check for the NULL value of A before mapping it to B.

To view the contents of the published document, you can use DocumentTracker, client which is downloadable from Advantage site or the other way is to have a subscription flow service and place “wm.flow:SavePipelineToFile” built in service, which would store the subscribed pipeline canonical on the disk, under the pipeline folder of your webMethods installation directory.

Hi Vijay ,
Let me give you some more details.I have 2 Integration servers( IS s) and one broker. One IS is my publisher in other words I have a flow service which receives a SOAP request and converts it to a document and provides it as input to publishAndWait.So this IS has only the publishable documents and a single service which publishes them.
Now I had to write my subscriber services and triggers.For that I need the document types so I have created publishable document types from the broker document type ( PublishSubscribeDev Guide). My service just takes 3 inputs (firstname,lastname,status) and returns back the person details from an oracle database as a document which is replied back to the waiting publisher service.
I have this architecture working absolutely fine for a simple document type say with 2 fields. I run the subscriber service independently and it works fine.Now I run my publisher service and check the document just before publishing it contains all the values. THe document is published to the broker and the trigger also invokes the subscriber service. In my subscriber service . First I have a debuglog to check if first_name is received properly and that is where I get
“Copy failed: No source data available: to=/message, from=/requestDoc/TXLife/TXLifeRequest/FIRST_NAME”

I am mapping the 3 fields (fname,lname,status) to the adapter service input and since it is null my service fails.
I need to know why I am not getting the value of first name in the subscriber service. That will solve my further problems.

    I am sorry if I have given too much details. Still I feel this is a very basic problem and anyone who has used publish/subscribe should be knowing where I am going wrong. 

Thanks in Advance!!!
Pavithra.

I tried to replicate your problem here and in a way was able to succesfully replicate it.

I too had my subscribing flow service on another IS, connected to the same Broker and it got triggered but the values I was getting were NULL.

The fix is with the reference document that we need to create in the Input/Output tab of the subscribing service. Can you check if you have the reference document created, with the same Package.Folder:Document Name hirarchy.

That should solve the problem.

Hi Pavithra,

I previously encountered a similar issue. In my case the problem was due to the fact that I incorrectly named the input of the subscribing service:

Make sure that the NAME of the input document you specified for your subscribing service is the fully qualified name of the DOCUMENT TYPE, such as “OctoTargetFile.docType:employeeUpsertFileSchemaDT (OctoTargetFile.docType:employeeUpsertFileSchemaDT)”. My mistake was that I was using a dummy name, eg “myEmployeeUpsertFile (OctoTargetFile.docType:employeeUpsertFileSchemaDT)”

Here is an extract of the note at the bottom of the “webMethods Developer User Guide.pdf” on page 126:
“If you intend to use this service in a trigger to process published documents, the input signature for this service needs to contain a document reference to the publishable document type. The name for this document reference MUST be the fully qualified name of the publishable document type (for example, folder.subfolder:PublishableDocumentTypeName).”

PS: you might also want to check that you entered the fully qualified name of the document type in the subscriber’s trigger configuration, such as “OctoTargetFile.docType:employeeUpsertFileSchemaDT”

Hi Vijay /Philip ,
Thanks a lot for your help. Your solution did help me solve that null values problem. I never thought that the name might be a problem. But as usual if one problem gets solved another shoots up. I am not able to map the adapter service output to the response document. This problem ( I guess) is due to the fact that some values are not string. So yesterday I tried converting all the values to string and yes it was working fine. But today it doesn’t work. This happens always even after disabling a trigger it fires. Something funny with WM I feel. Still I’m in the process of solving that problem. Once again thanks a lot for your prompt replies.
Will keep posting problems :slight_smile:

Thanks,
Pavithra.

Hi Pavithra,
And also make sure your publishable doc does not have any fields which contain special characters.
Regards,
Pradeep.

Hi ,
I am facing a peculiar problem. In short , I am querying the DB and on null values I am trying to return (reply) an Error Document and on success I am returning another document with values.
The success scenario works fine. Now in the error scenario I am not able to map any values to the error document be it calling another service or hard coding it. My flow is

Snapshot
flow.zip (14.9 k)

Concentrate only on the $null flow. It enters that branch and at the last debuglog it says
“Copy failed No input/source data available”
Where am I going wrong ??

Thanks,
Pavithra.

Hi ,
Could not solve that problem. Still I recreated my service by just copy pasting the flow steps and it works fine. I don’t know whether it is some caching problem ( I have not cached my service) or some internal webMethod fault.
If someone finds the solution plz let me know !!!
Thanks,
Pavithra.