Friday, January 25, 2013

How to Configure and Use Integration Broker

Integration Broker has become a critical service for PeopleSoft applications. If you are new to Integration Broker or are having trouble with Integration Broker configuration, then take a look at this new Integration Broker course published by my friends at CGI consulting. The course consists of an 84 page instructional PDF and a couple of source files. The course covers everything from configuration to using SoapUI. Here are some highlights:

  • Setting up Integration Broker
  • Publishing a CI based service
  • Testing a web service (CI or otherwise) with SoapUI
  • Calling a service from PeopleCode
  • Application Class PeopleCode handlers
  • Routing transformations
  • JDeveloper XSLT Mapper
  • App Engine Service Operation handlers
  • And much, much more

One item I noticed that is NOT covered is creating custom listeners and targets using the Integration Broker SDK. Not to worry, though because I cover creating custom targets in my book PeopleTools Tips & Techniques.

The CGI Integration Broker course is a great read. I recommend downloading and saving a copy for future reference.


  1. Jim, I am sending through the IB form data from a pdf document. It comes in OK and I can process it, but the gateway is sending a response back with a content header text/xml; charset = UTF-8 and abobe is barking at it saying it cannot process this content type. Do you know of a way I can override this to say application/pdf. When I change HEADER properties on my node it still seems to pass text/xml; charset = UTF-8.

    Any Thoughts?

  2. @JCook, I have had the same frustration. I spoke with Integration Broker development about this a few years ago. In PeopleTools 8.52 REST services you will see a drop-down to select the response Content-Type, but it is limited to just the items in the list.

    The work-around I have employed is to change the response header in my Apache httpd reverse proxy (everyone should use a reverse proxy). I use mod_headers to update the content-type header. You can use the Location and LocationMatch directives to match your Integration Broker URL.

    If you don't have a reverse proxy, then you can write a ServletFilter and register it with your PeopleSoft web server using a URL mapping that matches your Integration Broker URL.

  3. Subject: How to use PeopleSoft Campus Solution Delivered Web Services??

    Jim, I’m new to PeopleSoft and getting multiple issues during the testing of PeopleSoft Campus Solution delivered web services (like SSR_COURSE, SSR_ENROLLEMENT …). I had tested these web services by soapUI and getting following errors: Any help in this regards would be greatly appreciated.

    The default node is “PSFT_HR”

    (Note: - I’ve used documents “Enrollment Web Services Users Guide” & “Enrollment Web Services Developers Guide” as a reference document)

    Test 1:
    Service Name = SSR_COURSE
    Service Operation = SSR_GET_COURSE

    Request in SoapUI:
    ASOFDATE = 2011-05-27

    Response in soapUI:
    Fault code: Client
    Fault string: An Error occurred processing this request (14098,286)
    Default Title: Integration Broker Response
    Message ID: 14732-6
    Default Message: Error during Get Courses, Contact the Administrator
    Security Message: E

    Test 2:
    Service Name = SSR_ENROLLMENT
    Service Operation = SSR_GET_ ENROLLMENT

    Request in SoapUI:
    EMPLID = SR13454
    STRM = 0530

    Response in soapUI:
    Fault code: SOAP-ENV: Server
    Fault string: null
    IB Response type="error
    Default Title: Integration Broker Response
    Status Code: 20
    Message ID: 974
    Default Message: Integration Broker Sync Handler: OnRequest for message SSR_GET_ENROLLMENT could not run to completion on node PSFT_HR. (158,974)
    Parameter: PSFT_HR

  4. @Imran, did you look at errorLog.html or msgLog.html? These files exist in the PSIGW web app's directory in your weblogic (or websphere) PeopleSoft domain directory. You can configure the log level in the file or online in the Domain advanced configuration page. This Post tells you how to change the log level.

  5. Hello Jim,

    I am testing a CI based web service using SoapUI. The CI is based on a delivered component. When I test the CI through app designer in 2-tier and 3-tier mode it is working fine. But when I expose the same CI as a web service, I get an error message (Error Saving Component Interface). I have given all the necessary permissions to the user to access the CI. Am I missing something?

  6. @Narender, you might want to look in the app server log and also increase your IB log level and look at the msgLog.html and errorLog.html to see if there is more information regarding the error. The app server log should show why it can't save. It may have to do with data, and not security.

    You might also want to post this question on the OTN PeopleSoft General Discussion forum.

  7. Hello Jim,

    I configured the IB between HR 9.1 and CS9.0 after the CS-HR split.

    Our org. decided to use Subscriber Only model,

    So I configured the IB on both the systems CS 9.0 and HR 9.1 Local gateways, Local nodes and remote nodes, we often get the boomerang issues once in a week or once in two weeks, not sure how to fix this, Currently we are doing the following to fix it, we set up a notification, text message to cell phone and an email, we'll receive if we see a bunch of messages are transferring between the systems. And then we inactivate the Service operation and cancel the message that causes the boomerang issue, and activate the service operation.

    Is there any better solution that i can follow, the solution that oracle gave in the document in the Feature Pack 4, has lot of configuration has to be done, So i am looking for a better solution,

    Thank You

  8. @Afjal, I am familiar with the CS/HR split, but I am not familiar with a boomerang issue. Messages coming into an Integration Gateway/Integration Broker instance are routed based on configuration. Normally, for each service operation, you will have a system of record (the publisher) and a subscriber. In the subscriber system, you will have an inbound routing. In the publisher system, you will have an outbound routing. The publisher should NOT have an inbound routing. The subscriber should NOT have an outbound routing.

    It is possible to have routings that send from one node to another, with no local subscription. This is common in a hub/spoke model, but it sounds like you are using a point-to-point model. If you have any hub/spoke node to node routings, then this may be causing your problem because it sounds like you intended to configure for point to point.

    It really sounds like a routing configuration issue. Make sure only have the necessary routings configured. You shouldn't have any to local or local to local routings unless specifically identified by you or the configuration documents (for example, HR uses local to local routings to subscribe to worker and personnel messages).

    Let me know if I misunderstood the issue.

  9. Jim,

    Each database has their own Local Gateway & Local nodes configured as per the oracle documentation, and I configured the IB for some of the service operations to go the messages both directions (As per Oracle terminology its called Subscriber Only model, We call as bidirectional), from CS to HR and HR to CS in the routing definitions., I am sure I did inactivated all the other Routing's are inactivated in the Routing Definitions. Only Routing's active are CS to HR and HR to CS.
    Thank You

  10. That is what I thought. For each service operation, a node should either be a publisher or a subscriber, not both. A node can be a publisher and a subscriber, but each service operation should be one or the other. It should not be both with the same service operation and the same nodes. You can configure it this way, but it is not a best practice.

    Think of it this way, which system is the system of record for the PERSON_BASIC_SYNC message? It should be HCM, right? If that is the case, then HCM will ONLY have publish (outbound) routings for the PERSON_BASIC_SYNC service operation and every other system will only have inbound/subscribing routings for that same service operation.

    Another common example is USER_PROFILE. If you allow each node to maintain and publish USER_PROFILE changes, then each node will be a publisher and a subscriber. You can do this, but it is not recommended. The best practice is to make one node the system of record and have publish (outbound) routings only. All other nodes have subscription (inbound) routings only.

  11. Hi Jim,

    I have created an App package based webservice and exposed it to 3rd party. this service and its service operations utilizes rowset based messages. Request message consists of emplid whereas response message comprises of compensation and other critical data.As a part of SOAP request, authentication headers have been taken care as well.
    My 1st part of job is done. Now I am supposed to implement security via digital certificates or encryption on the response which is going back to 3rd party in webservice soap response. Can you help me with the steps i need to follow to implement the same? I tried going through peoplebooks but could not find a sure shot solution for the same query.


  12. @Anuj did you see this PeopleBook entry? It is quite lengthy, so it will be a bit much to repeat here in the comments. After you start on this, if you have specific questions about any of the steps, you may want to ask the question in the PeopleSoft General Discussion OTN forum where several people can help answer your questions.

  13. Hi Jim, I need some guidance on how to proceed with an Integration Broker - JMS Connector issue that I am facing with.
    I am trying to integrate Peoplesoft with a third party factory system through IBM MQs. JMS Target Connector is configured properly and I am able to send out messages succesfully. But the issue is Peoplesoft has a delivered bug wherein "Correlation ID does not match" error is occuring upon receipt of response messages. When I checked with Oracle, this seems to be a delivered bug (Bug 16012124)which has been internally fixed and to be delivered in 8.54. As we are still in Tools 8.51, we have to do our own fix on this.
    Issue:- For outgoing synchronous JMS messages, Peoplesoft sets Correlation ID = Transaction ID. The third party sends the same ID back as correlation ID. But PS expects the Message ID in the correlation ID and hence throws the error.PS is wrongly sending the Transaction ID in place of the Message ID which is the delivered bug.I am not able to identify the exact portion where the Correlation ID is getting set in the IB connector. Would you be able to help me with it?

  14. @Stefy, I don't know either. Have you requested a one-off or back port of the solution?

  15. Hi Jim.

    Stefy again.

    As Oracle failed to provide us the solution, we thought we could modify JMSTargetConnector java file. We were able to locate the .class file at location /sandisk/appselm2/peoplesoft/elmdev03/webserv/ELMDEV03/applications/peoplesoft/PSIGW.war/WEB-INF/classes/com/peoplesoft/pt/integrationgateway/targetconnector/; we decompiled it and saved the file as and saved it at the same location. We found out that the correlation id exception was occuring due to code:
    if (!objectMessageJMSCorrelationID.equals(msgJMSMessageID))
    throw new ExternalApplicationException("JMSTargetConnector:ExternalApplicationException. Correlation ID does not match.", new MessageCatalogEntry(10624), null);

    We modified the code to suite our requirement.

    Now the question we are facing is how to compile the .java file. Whenver we try to compile we get many class not found excpetion. Please let me know if our approach is correct. If yes what steps we need to follow when modifying a devliverd java connector class as we are doing. If not what alternate solutions we may have. Need urgent help. Thanks in advance, Stefy Baby

  16. @Stefy, for the record, I'm probably supposed to tell you not to decompile someone else's code ;). But the fact is, I've been in your position and done the exact same thing. The key difference, though, was that I renamed my source file so the generated connector had a new name. I suggest you do the same. That way your connector will still exist after the next upgrade.

    Yes, you can compile target connectors. You just need to setup your compile environment to include all of the required jars and class files. This PeopleBook entry will help you prepare your environment for compilation. At the end, it also tells you how to install Target Connectors. Basically, you just copy them into the same folder as the one you found. After that, go into your gateway settings online and click the Load Connectors button. This should bring in your new connector. Once loaded, though, you have to restart your web server each time you change your target connector.

    I have a step-by-step example of this in my PeopleSoft PeopleTools Tips and Techniques book.

  17. Jim - the link to the PDF document appears to have gone stale. Do you know if it's available anywhere else?

  18. @Josh, the owner is moving that blog. I will update when it is available.

  19. I had a doubt related with CI based webservice. Please do help me with it.

    Actually I am creating a webservice using CI.
    I created a response message , a request message and used the handler 'Create' which was already was created by default when CI was created.
    But when i run it through SoapUI, it gives error "Integration Broker Sync Handler: OnRequest for message ABC could not run to completion on node QE_LOCAL. (158,974). Can you please tel me hjow to resolve.
    Or does it happen as Im using wrong handler. Basically what needs to be written in the handler function if i want to create my own method?
    Thanks in advance,

  20. @Shobha, SoapUI is a common test tool for PeopleSoft CI's. You should try posting your question in the PeopleSoft General OTN Forum.

  21. Hello Jim,

    I have developing a synchronous message for integrating with third party system which runs on .NET.

    I have create my request message using Part rowset & container message and for response message, I have created schema using jdeveloper.

    When the external system sends a response, I am able to parse it and do internal processing. But when I send the response, the external system is receiving it as null. I have also tested my message using SoapUI. When I send a request the response comes back with proper SOAP wrapping which is well formed.

    When I validate the response message, it shows an error like below

    line -1: Missing message part with name [{}NQ_CUSTOMER_CREATE_RESP]

    This is my SOAP response


    Below is the schema definition

    Your help will be much appreciated.

  22. @Narender, I see the same question over here on the OTN forum. I'll post my response there.

  23. Hello Jim,

    I figured out the reason why it is not validating. I miss-spelt the namespace.

    I have defined targetnamespace as

    And in my handler code, I wrote this

    it should be "schema" not "schemas" the "s" made all the difference. I clearly Overlooked that part.

  24. Hi Jim,

    I tried to use the link to:

    and I get a 404 Error.

  25. @ChicagoMom, thanks! Hakan's blog moved, so I updated the link. It should work now.

  26. Hi Jim,

    Could you please shed some light on how integration broker behaves in a Disaster Recovery Scenario?

  27. @Pankaj, you might want to ask that question on the document's author's web site, or in the PeopleSoft General Discussion forum.

  28. Hi Jim,
    We have a requirement to send the terminated employee id's from PS HRMS to SUN IM. For this we have decided to place the java class file in PS web server. So whenever an employee is terminated we will invoke the class file which in turn triggers workflow in SUN IM. Also we have to capture every transaction (to check whether it is success or failure) through IB. Could you please provide us some inputs on invoking the class file through IB.

  29. @Vinusaravanan, if you create an Integration Broker custom target connector, then placing your class files on the web server makes sense. The PeopleSoft IB SDK tells you where to place the connector and how to write it. My book also has a chapter showing how to create a custom target connector.

    The alternative, that might be easier, is to put the class files in your app server classpath and use GetJavaObject and CreateJavaClass in your PeopleCode request handler. You may have to create a local-to-local routing for this.

  30. Thanks for your inputs, Jim.

  31. Hi Jim,

    I am surrently working setting up a 3rd Party Web Service from PeopleSoft 9.2 (PT8.53) and while testing the service operation I am getting following Error:

    "Integration Synchronous Handler: No destination node can be determined for the request on node PSFT_HR. (158,963) IBTREE_WRK.IB_INVOKEOPER.FieldChange PCPC:5083 Statement:110 "

    have any ideas where can start looking for ?

    Thanks for the help!!

  32. @Ajain2882, did you enable the any to local routing? Did you add the destination node to your end point configuration in PeopleTools > Integration Broker > Configuration > Service Configuration/

  33. @Jim I was able to rectify the previous issue.I have one more issue with my another Synchronous web service. I have created a Rowset base request and response messages and trying to provide the Web Service to 3rd party system.While testing the service Operation I am getting an error This method can only be used by nonrowset-based messages. (2,852)]

    So is there a restriction to use Row Set base messages for Synchronous type of operation? What else could be the issue.

    Thanks for you help!!

  34. @Ajain2882, their is no limitation from the configuration perspective. Your error sounds more like a PeopleCode problem. For example, if you have a Rowset based message, you can't use MSG.SetXmlDoc.

  35. Hi Jim,
    Can you provide some info on the best practice for PS IB namespace selection? It is my understanding, perhaps incorrect, that the sole purpose of the namespace is to disambiguate XML tags so that using the same tag name as someone else does not cause a collision. If this is the case, should not the namespaces in the Service Configuration component be set using the local institution's URL?
    Jim Rowan

  36. @Jim, your understanding of XML namespaces is correct. Whether you change the namespace, or keep it the generic PeopleSoft/Oracle namespace depends on how you define ambiguous. For example, all PeopleSoft customer institutions have personal data, oprid data, depts, etc. The contents may differ, the definitions of these terms may differ, but the structure will remain the same. PeopleSoft's understanding of the data will remain the same.

    The only time where I can see it being a concern is when two separate institutions share data and have an XML structure that is similar, but slightly different. For example, one is using person/name to be employee, and another is using person/name to be student and the root of the document is identical, so the context doesn't distinguish between the two.

  37. I just updated the link again to keep up with the file location. In Hakan's post, look for the text "The training can be downloaded using the following link" and click the word "link."

  38. Hi Jim,

    Thank you for your wonderful posts. I am trying to process a data upload where I am trying to publish the messages through PeopleSoft over Integration Broker asynchronously in an Application Engine. The whole point is to be able to send several messages and consume them in the same node. Before I send the messages, I am storing the data on a table (say T1) to store all the field values in the upload file.

    While consuming I am trying to expose each message to the Component Interface and the exceptions are logged onto the same table T1. Let's say for each transaction we are flagging the table field (say Processed_flag ='Y').

    I need a mechanism where I could just wait for all the asynchronous messages to complete. I am thinking of checking the T1 table, if there are any rows on the T1 table where Processed_flag is 'N', just make the thread sleep for more time. While all the messages are not processed keep it sleeping and don't let the application engine complete.

    The only benefit I can get is I don't have to wait for multiple instances at once or does not have to make the synchronous call. The whole idea is to use the component by different transactions ( as if it was used by say 100 people -> 100 transactions ).

    Unless those 100 transactions are complete, we will be make sure out T1 table keeps a record of what goes on and off. If something is wrong, it can log the exceptions catched by the CI.

    Any comments on this approach would be appreciated. Thanks in advance!

  39. @Sandeep, it is common to add the Process Instance to rows processed by an App Engine. I'm not sure that sleeping will help you much. If you have a PeopleCode subscription processing the message and updating the table, that will happen in the app server, not the process scheduler, and will be in a different session. In fact, if you are writing the process instance in the App Engine, but don't commit, and then try to update the same row through IB, then the IB process will likely fail because it can't lock the row for update.

    I am wondering if it would be better to publish your messages, like you intend and just let your App Engine finish. Schedule your app engine to run periodically. If it sees rows that already have a Process Instance and value of N, then those are your problem rows and you can address them.

  40. @Jim

    You are right, not committing the data would result in locking on the tables.

    Even if we are able to validate the data on those tables before app engine completes, the whole idea to send the messages asynchronously is of no use. In that case, using synchronous messages would be better and run the processes in parallel.

    So, we decided to let the application engine complete and publish all the chunks of data through messages and make sure the messages are completely consumed in the same node.

    1. We will be updating the table T1, for all the processed / successful / failed rows as we keep consuming the messages and use them as needed.

    2. We will keep an audit or counter for all the rows published and consumed. Since exposing the same component to multiple transactions would be a huge performance impact. We want to make sure how it would be helpful if say 50 users are updating the same tables behind component using the same CI ( of course different instances ). I will completing mu proof of concept and hopefully it will be much better than running the processes in parallel.

    Thank you for your precious time to look at my question and providing your feedback.

  41. Hi Jim,
    I am trying to publish the message by populating the message through LoadXMLstring. Below is the code I have used. I am able to generate the XML string with the required fields but I am unable to execute LoadXML string (error message -Message name W_PS_TEST_MSG not in message data. The expected message name was not found in the message data at the correct location. Examine the raw XML message data in the Integration Broker Monitor.")Please note the message-W_PS_TEST_MSG exists in Service Operation-W_PS_TEST. Could you please help me to rectify this issue.

    Local SOAPDoc &SOAPDoc;

    &SOAPDoc = CreateSOAPDoc();

    &SOAPDocXM = &SOAPDoc.XmlDoc;
    Local XmlNode &SOAPDocXML = &SOAPDocXM.DocumentElement;

    Local XmlNode &empl_id = &SOAPDocXML.AddElement("EMPLID");
    &empl_id.NodeValue = "12345";

    Local XmlNode &Oprid = &SOAPDocXML.AddElement("OPRID");
    &Oprid.NodeValue = "12345";

    Local XmlNode &first_name = &SOAPDocXML.AddElement("FIRST_NAME");
    &first_name.NodeValue = "test";

    Local XmlNode &last_name = &SOAPDocXML.AddElement("LAST_NAME");
    &last_name.NodeValue = "test";

    Local XmlNode &status = &SOAPDocXML.AddElement("HR_STATUS");
    &status.NodeValue = "I";

    &strXml = &SOAPDocXM.GenXmlString();

    MessageBox(0, "", 0, 0, &strXml);

    &MSG = CreateMessage(Operation.W_PS_TEST);


    &IntBroker = %IntBroker;

  42. @Vinusaravanan, I noticed a few things in your code that I am wondering about:

    1. Is your message an unstructured message?

    2. Did you know that you can copy the XmlDoc from the SOAPDoc directly into the Message by using the SOAPDoc.XmlDoc property and the Message.SetXmlDoc methods? You don't need to convert to a string in the middle.

    3. It is unusual to publish a SOAP asynchronous message. Usually SOAP is synchronous, where you send a request and expect a response. You can see an example of using SOAPDoc in this manner in PeopleBooks here.

  43. Thanks for your inputs, Jim. My message is a structured(asynchronous) type. I used copyrowset and publish to send the message. Now am able to publish the message.

  44. Hi Jim,

    I recently published a rowset based asynchronous message on Local to local routing.

    I created two service operations
    say FT_SEND and FT_RECEIVE, both of these service operations use different messages and local to local routings.

    1. FT_SEND does not implement any handler and is able to publish the messages in my app engine.
    2. FT_RECEIVE implements INotificationhandler and OnNotify method through Application Package.

    Service operations/handler/queues are active for both service operations.

    1. FT_SEND : The messages are published through service operation FT_SEND and completed as 'Done'.

    2.FT_RECEIVE : Somehow the messages are not consumed with service operation FT_RECEIVE even though the configuration seems fine.

    Can you guess what might be wrong with this configuration?

    Thanks in advance for your precious time.

  45. @Sandeep, I'm a little confused. Are you expecting FT_RECEIVE to process data from FT_SEND? If so, that is not how it works. In a local to local routing, it is the same service operation. A service operation doesn't necessarily communicate direction. The routing communicates direction. So if you want to process FT_SEND locally, then you need to add the handler to FT_SEND along with a local to local routing.

  46. You guessed it right. I was expecting FT_RECEIVE to receive those messages and process them because earlier I had tried adding the onNotify Handler to the same service operation FT_SEND instead of FT_RECEIVE and it seems like the message is stuck in New Status once published.

    And as soon as I remove the handler from FT_SEND, it publishes the messages and the messages go the success on publish or resubmission.

    Also, I checked when I looked at the auto generated routing for FT_RECEIVE the routing type was generated as 'Outbound Request'

    What would be your suggestion on this scenario?


  47. @Sandeep, add a local to local routing on FT_SEND and configure your handler on FT_SEND. If the message is stuck in new status, that is different. There are actually 3 places it could be in new status: instance, publication, and subscription. Whichever queue is stuck, it shouldn't be caused by the existence of a handler on FT_SEND.

  48. You are correct, Jim. Now, I implemented the handler on FT_SEND and it worked fine. The only thing I had to do is to cancel those messages and resubmit those and those messages flowed through the PUB/SUB and processed the business logic as needed.

    They were stuck as opreation instances.

    Why they got stuck in New Status, is something I have to investigate further.

    Do you think clearing the IB cache is going to help in this scenario?

    Thank you very much for your time.

  49. Jim We are sending a request from Peoplesoft to sharepoint. We are getting a default response everytime we send a request and the 3rd party receive no data it shows as getting blank xml content value. I gotto deliver this in a day and i am still stuck with it. Please any suggestion would be highly appreciated.

  50. @Suresh, configure Integration Broker to use a debugging proxy such as Fiddler2 or WebScarab. Then you can see what IB is REALLY sending.

  51. Hello Jim, thanks for all the tips and techniques over the years. I have a JMS-related question that maybe only you can answer. I'm using JMS Connector to get to MQ for sending asynchronous payment messages. Do you know if JMS Connector sends back a transaction id if connection property JMSAcknowledgement is set to Auto.Acknowledgement? My goal is to get a confirmation that the target JMS connector has received this message. Thanks a lot!!

  52. @LH, Unfortunately, I have no experience with JMS. I suggest you ask your question on the PeopleSoft General Discussion OTN Forum.

  53. Thanks you Jim.

  54. Hi Jim,

    Is there any delivered components or process to handle reimbursemetns in Peoplesoft Campus Solutions

  55. Hi Jim

    Can you please help me capture a fault string exception. I am working on FSCM 9.1 and tools 8.52 Integration broker . I am sending a request through the webservices to a third party service. If everything is OK with the XML, it returns the response message. But when something wrong with the XML, it is giving me HTTP 500 error. Where as the same request when i send through the SOAPUI I am getting fault string which gives me an indication of where my XML request is wrong. I want to be able to capture that fault string and display in error/log files which I am unable to do when I invoke the service from peoplesoft. Did anyone come across this kind of situation before, Please help me with the sample code. The request I am generating is by using XML doc classes.

  56. @Mohd, I suggest you post your question on Hakan's page at This post is just a link to his course.

  57. @Jim, the training document does not indicate how to catch the fault string. can you please throw some light on it. Thanks

  58. @Mohd, I think your question is a great question. I just don't know the answer. My experience is mostly with PeopleSoft as a provider, not as a consumer. This is why I think you may want to ask your question of the post's author on the author's blog.

  59. Dear Jim , I am getting this Publication Contract Error Messages :
    UserID PS not authorized for Service Operation KS_RA_CAMPUS_ID_FULLSYNC_SOR .

    I have assigned the require permission lists (HCSPSERVICE , HCSPSERVICETL ,OHCSPSRSERVIVE ) TO PS .

    Any Thoughts ?

  60. @Munib, from the Service Operation definition, did you click the Service Operation Security link and verify that the permission lists match?

  61. I work on tools V 8.52 doing an integration with Fusion Middleware wherein i subscribe async messages. i am able to recieve the messages but the messages are going in error state with the error message: "Error occured while parsing the XML. XML is empty or not an XML." i have set the authentication type as null. please help me find a solution

  62. @Nischay Integration Broker problems can be quite complicated. I suggest you file a ticket with My Oracle Support.

  63. did that.. didnt get an understandable solution.

  64. @Nischay, you might try posting your question on the author's blog at

  65. Hi Jim,

    We have a custom component for leave application. When we apply leave using this component, it triggers an AWE workflow (approval and notification). It works fine.

    Now the same component when exposed to Web Service (using CI based web service) and invoked by 3rd party system, Workflow event is triggered, but the email is not.

    Please need your help, is it a bug?

  66. @Tushar, I am not sure. It is certainly worth entering a case in global support.

  67. hi Jim,
    we are trying to test a synchronous inbound message in development environment using both send master and handler.
    Handler tester will return confirmation 0 and do not hit synchronous services in monitor. where as send master hit synchronous services in error below.
    SOAP-ENV:ServernullIntegration Broker Response20968

    dev is local node and inbound is external node.
    Please advise.

  68. Hi for all,

    At present I have a problem with a web service which is invoked by another system to receive information, the error shown in the log message say the next:

    Type Error
    ErrorLevel Standard Gateway Exception
    Description null
    MessageCatalog MessageSet:180 MessageID:69 DefaultMessage: Function %1 does not return a result. (180,69)

    Stack Trace
    at Code))
    at javax.servlet.http.HttpServlet.service( Code))
    at weblogic.servlet.internal.ServletStubImpl$ Compiled Code))
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet( Code))
    at weblogic.servlet.internal.TailFilter.doFilter( Code))
    at weblogic.servlet.internal.FilterChainImpl.doFilter( Code))
    at weblogic.servlet.internal.FilterChainImpl.doFilter( Compiled Code))
    at weblogic.servlet.internal.WebAppServletContext$ Code))
    at Code))
    at Compiled Code))
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet( Code))
    at weblogic.servlet.internal.ServletRequestImpl.execute( Code))
    at weblogic.kernel.ExecuteThread.execute( Code))

    Message-ID: <1747824397.1418218602805.JavaMail.psoft@crmdev>
    Date: Wed, 10 Dec 2014 09:06:42 -0430 (GMT-04:30)
    Mime-Version: 1.0
    Content-Type: multipart/related;
    Content-ID: PeopleSoft-Integration-Broker-Internal-Mime-Message
    PeopleSoft-ToolsRelease: 8.48

    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Content-Disposition: inline
    Content-ID: IBInfo

    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Content-Disposition: inline
    Content-ID: ContentSection0



    Message-ID: <2055483149.1418218602805.JavaMail.psoft@crmdev>
    Date: Wed, 10 Dec 2014 09:06:42 -0430 (GMT-04:30)
    Mime-Version: 1.0
    Content-Type: multipart/related; boundary="Integration_Server_MIME_Boundary"
    Content-ID: PeopleSoft-Integration-Broker-Internal-Mime-Message
    PeopleSoft-ToolsRelease: 8.48

    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Content-Disposition: inline
    Content-ID: IBInfo

    2018069Function OnRequest does not return a result. (180,69) CTV_MSG_INT006.CTV_MSG_INT006_OnRequest.OnExecute Name:OnRequest PCPC:13008 Statement:146ContentSection0N
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Content-ID: ContentSection0
    Content-Disposition: inline

    Function %1 does not return a result. (180,69)

    In the soapUI we observe the following:


    Integration Broker Response
    Function %1 does not return a result. (180,69)

    I would appreciate your help or insight regarding this the error, thanks.

  69. Hey Jim,

    I'm working on CRM 8.48. i am consuming a web service from a third party system. i was facing issues while generating a request XML so i have generated an XML by concatenating various strings via peoplecode. this XML is exactly identical to the request XML in SOAP UI. I now need to pass that very XML as my request XML during consumption. could you help me out with the coding aspect of that? cuz i feel the one i generated is probably not being considered as an XML- its being taken as a string

  70. @eNVi, it kind of depends on how you are invoking the external service, but the basics are the same:

    * Create or acquire an instance of XmlDoc (Message.GetXmlDoc, etc).

    * Load the XmlDoc using something like XmlDoc.ParseXmlFromString.

  71. Hi Jim

    I am providing a webservice to .NET. I received request and gave a response. However, the name space in the response is different from the WSDL I have. In the reponse it is


    Whereas, the correct name space should be


    Due to which, the other system is unable to deserialize the responses.

    What could be the cause of this issue and could I fix it myself?


  72. Hi Jim,

    We are trying to send a request to a 3rd party (non-peoplesoft system). The 3rd party requires us to digitally sign the request with a certificate, which we are able to do. However, PeopleSoft automatically appends a Username Token to the request, which causes the 3rd party to not accept the request. We tried setting the "Exclude PSFT Auth Token" option for our service operation, but since the request is going to a non-peoplesoft system, the token is included anyway. Do you know of a way to exclude the token? Oracle has confirmed that our settings are correct, but because the 3rd party is a non-peoplesoft system, the token is included, but we are wondering if there is a way to exclude it.


  73. @BBunes, sending a PeopleSoft auth token to a non-PeopleSoft nodes sounds like a security problem. Is the node configured as an external node?

  74. Jim,

    Yes, our sending node is configured as an external node. Oracle has said that the UsernameToken is always included in the request if the request is sent to a non-PeopleSoft system, even if the "Exclude PSFT Auth Token" option is selected for that operation.

    To clarify, we are on PT 8.53 and this is being sent from ELM 9.2. The specific xml node we are trying to remove is below.



  75. Hello Jim,
    I am using IB Sync to transmit an XML file that's already formatted. Part of the XML file was created in UNIX using PERL and carriage returns are replaced with
    in the script. This is then appended to the rest of the message created using XMLDOC in peoplecode. But when I use SetXMLDoc and call a Sync message, IB (as expected) tries to format the XML and escapes the & in "
    " to &#xd; - which invalidates the message now. So 1)how to make the IB not to replace the & in
    or 2) how to generate the
    as its not being done automatically for Carriage return as of now..

    Many thanks...

  76. I noticed in my earlier message my ampersands were taken out by the site. so let me try to use the literal ampersand for "&".

    so basically I would like to know if IB can leave a XML which has a valid escape value "ampersand#xd;" for carriage return as is and not to escape the "ampersand" in that value to "ameprsandamp;#xd;" or can we have IB generate that escape value "ampersand#xd;" for carriage return. Also The receiver will not accept tags for this node as we are sending a signature in that node. (we are generating the signature using PERL script in UNIX and passing it in the XML message)

  77. Hi Jim,

    we have a requirement where we get a GPG encrypted message through IB from third party and we have to decrypt it on our side.

    I know I can install GPG on the server and decrypt a file using the below command.

    Exec("echo passphrase |pgp.exe --passphrase-fd -o c:\xxxx\Test.txt -d c:\xxxx\Test.pgp") .

    How can we do the same with messages , I know we can run a command line statement in Exec but don't know how I can decrypt the encrypted fields coming in a message,

    Can this be done? it would be help full if you can give me the command that I can use inside the exec for each field and how can I catch the decrypted field value into a variable.


  78. @Vinjas, take a look at PeopleSoft's pluggable encryption.

  79. Hi Jim

    I have one question , how to notify / get notification as soon as some IB message struck in error. Because we are facing some issues like we are unable to come to know the failures in html email approvals?

    viswanathareddy K

  80. @Viswanathareddy, there is a delivered notification process that you can schedule, but that isn't immediate. Alternatively, you can create an App Engine daemon process to check the IB tables for messages in error status.

  81. Jim, love your book (PPT&T). We have a web service that times out on synchronous on large messages due to the component processing being large (BI_ENTRY). Upping the timeout is not an option according to our Admins. If we switch to asynchronous and deliver the keys in a separate process, would we still have timeout issues on the DoSave() not finishing in time? In other words, is the 50 second CI processing timeout applicable to sync *and* async messages?


  82. @Jeff, the large amount of data pushed through a CI within a web service will cause you problems. The apps FullSync messages have a similar problem. The way they handle it is to insert the received data into a staging table and then use the ProcessRequest API to schedule an App Engine to process the received data. The web service can then return a result before the App Engine finishes (and maybe even before it starts).

  83. @Jim. Thanks for the info. Does that web service CI limitation issue apply to Asynch messages as well? We don't mind if it takes longer as long as it runs. The staging table via web service is they way I am definitely leaning (even before your reply) but I have to answer the asynch option question that was posed to me. Thanks!

  84. @Jeff, I am not sure. Usually a timeout is on the sender's side, not the side doing the processing. The timeout is just a resource management technique. It frees up resources on the sender's side if the receiver hangs onto a connection indefinitely.

  85. Hi Jim,

    I know I can use encryption profile PS_CREDIT_CARD_Decrypt to decrypt a field that is encrypted using PS_CREDIT_CARD_encryp on an other PeopleSoft system like HR and sent to finance through ib(I tried it and it worked). can we use the same decrypt function to decrypt a base64 encrypted value from third party?

  86. @Vinjas, as you probably know, Base64 is not encryption, but encoding. What this means is there are no public or private keys. Anyone can encode or decode someone else's base64 data. There are a good dozen ways to encode and decode base64 with PeopleCode. You can find examples in these posts on my blog.

  87. HI Jim,

    We are working on Customers CI interface through Asyn messaging. We are receiving the Customer data as a message from third party system. We have the subscription app package written on handler class. The App package calls a CI to validate the data. But the problem here is when Insert fails due to CI validation we are unable to know that it failed to load a customer and the service operation monitor still shows the status as DONE.. Any suggestions to handle this scenario??

  88. @Mohd, there are 3 IB queues. The subscription queue should show an error if the CI fails. I have seen CI errors in the IB queue many times. The instance queue will show as DONE, but the subscription queue should say ERROR.

  89. Hi Jim,

    I am trying to send messages from Peoplesoft 8.52 to weblogic JMS Queues, the messages are in new status. Created JMS Server/Connection Factory/JMS Queue on weblogic server. Created an external node in Peoplesoft with Connector ID as JMSTARGET and used the JMS queue. Ping node is working and the ping messages are visible in JMS Queue. Created a Peoplesoft non-rowset based message and Service operation(Asynchronous one way) and provided a routing from local node to the external node. I tried to publish messages to the service operation from peoplecode, the meesages are all in new status. Please provide your inputs to resolve this issue.


  90. Hi Jim,

    We are receiving messages from a third party through JMS queue. We wanted to capture the transaction ID of the inbound message that we get through the OnNotify handler peopleCode.
    I used the IB class property &msg.transactionid but that generates some new Id which does not match with the transaction ID I see in the Asynchronous monitor for that message. Could you please help me understand if there is Any different way to Capture the transaction ID for the Aynchronous inbound message I get from the third party?

  91. @Mohd, when I look at an async service in the service operation monitor, I notice that each instance has at least 2 transaction IDs: The initial instance transaction ID and one transaction ID for each publication or subscription contract. Did you check the transaction ID against the appropriate queue to see if the ID matches one of the other queues?

  92. Thanks for the quick response Jim.

    As you said there are a couple Transaction IDS. One being initial and other being the Subscription Transaction ID. The one that &msg.Transactionid fetching me is the Subscription.
    Thanks I dint realize that its atleast matching the Subscription ID, but is there a way to Capture the initial Trasaction Id? because if we want to search for ab Ib transaction we would do it using the Initial ID right? because if i search using the Subscription Transaction Id it does not find the transaction. Any hint from your end regarding this would be a lot help me to me. Thanks you again.

  93. Hi Jim
    I am working on a requirement where a custom request-id property has to be set on the response header in a REST synchronous transaction. While I am able to do this over the response message when all is good using the below code snippet, i am unable to do the same on the fault message.
    &resMessage.IBInfo.IBConnectorInfo.AddConnectorProperties("Request-id", &requestid, %HttpHeader);
    When onError method is invoked by IB, it just returns a string and we dont have a hold of the response object to set any property on it.
    Can you please share any possible way to do this?
    Thanks in advance.

  94. @Vivek, you may want to post that question on the PeopleSoft General OTN Discussion forum.