Search This Blog

SBL-EAI-04022: Service Method arguments property set has no children, should have one child of type 'SiebelMessage'

Applies to:

Siebel System Software - Version: 7.5.3 [16157] and later   [Release: V7 and later ]
Information in this document applies to any platform.
Area(s):Siebel EAI
Release(s):V8 (Enterprise), V8 (Professional), V7 (Enterprise), V7 (Professional), V7 (MidMarket)
Database(s):All Supported Databases
App Server OS(s):All Supported Platforms
Latest release tested against:V8 (Enterprise)
Keywords:Web service, inbound, outbound, http, Framework, WSDL, provider, consumer, WSDL Import Wizard

This document was previously published as Siebel Technical Note 626.

Purpose

In Siebel version 7.5, the Web Services Framework was introduced, which is a set of business services, interfaces and components that you can use to easily and quickly:
 
  • Expose an existing Siebel business service or workflow process as a Web Service to be consumed by an external application.
 
  • Consume a Web Service Definition Language (WSDL) file provided by an external application and have the Siebel application invoke that Web Service.
 
This Technical Note outlines the steps required to expose an existing Siebel business services as a Web Service. It also uses a Siebel client to then invoke the Siebel Web Service. For ease of demonstration, this Technical Note uses a Siebel Application Service Interface (ASI).

Scope and Application

This document is informational and intended for any user.

How To Test Siebel Inbound Web Services Using a Siebel Client

Standard Siebel applications provide Application Services Interfaces (ASIs) for many of the standard requests, such as Order Processing or Partner Management. A Siebel ASI is a special type of business service which provides standard methods and infrastructure for data synchronization. The advantages of using Siebel ASIs are as follows:
 
  • ASIs are version and schema independent so you can use the same ASI invocations across different Siebel versions. The independence is accomplished through the use of internal and external integration objects.
 
  • ASIs can be easily and quickly be exposed within the Web Services framework.
 
For a list of all the pre-built ASIs, refer to Siebel Bookshelf version 7.8 > Application Services Interface Reference > Predefined Application Service Interfaces > Prebuilt ASIs.
 

Overview

 
The general steps to expose and consume a Siebel ASI are:
 
System
Step
Application
Provider
1. Identify the ASI business service to be exposed
Siebel Bookshelf and Siebel Tools
2. Activate the business service in the Inbound Web Services Administration View.
Siebel Client
3. Generate a WSDL that describes the web service
Siebel Client
Consumer
4. Import the WSDL and define the proxy objects (Business service and Integration objects)
Siebel Tools
5. Register the business service in the Outbound Web Services Administration View
Siebel Client
6. Invoke the Web Service
Siebel Client or Siebel Tools
 
System Prerequisites
 
In order to build the objects in this Technical Note, you will need the following for the Web Services Provider and Web Services Consumer:
 
  • Web Services Provider
 
    1. One Siebel server environment, with the Siebel Web Server Extension  (SWSE) set up
 
    1. Application servers need to be running
 
    1. Siebel Enterprise Application Integration (EAI) component group needs to be enabled
 
    1. Access to the Web Services Administration view for this application
 
    1. Since we are using a pre-built Siebel ASI, you will not need to compile any .srf files on this system.
 
  • Web Services Consumer
 
    1. You will need a Siebel Dedicated or Zero Footprint Client.
 
    1. Siebel Tools client
 
    1. You will need the ability to compile and deploy a new .srf file on this system
 
    1. After you compile a new .srf file, you will need to stop and restart the components involved with the testing so that the new .srf file is used.
 
    1. You will also need to restart the object manager for your thin client.
 
    1. You must have access to the Workflow Process Simulator or Business Service Simulator to run tests.
 
You can use one environment (provider and consumer are the same system) for your testing. If you use one environment for all your testing, where you have the Siebel server, Siebel Tools and Siebel dedicated client all running on one machine, make sure that you keep track of the .srf file updates and restart components or clients after the .srf file changes.
 
You can also use two separate environments, for example:
 
  • As the consumer application, you can use your own dedicated Siebel client and the sample or local database.
 
  • As the provider application, you can use your Siebel server and your server database.
 
The advantage of the above configuration is that you can do all of the required .srf file changes on your local client. Since we are testing with a Siebel ASI, the Siebel server will already have the ASI pre-built, and you will only need to activate it.
 
Exposing a Siebel ASI as an Inbound Web Service
 
On the Web Service Provider System
 
  1. Identify or create the business service or web service to be exposed. In this case, we are using the Siebel Contact ASI. Below is an example of how you can see it in Siebel Tools.
 
 
  1. Activate it in the Siebel Web Services Administration View as an Inbound Web Service. Login to the Siebel Client, and go to the following view:
 
    1. In Siebel 7.5, locate the view under Web Services Administration.
 
    1. In Siebel 7.7.x, 7.8.x, and 8.x, locate the view under Administration - Web Services.
 
    1. Navigate to the Inbound Web Services view and find the entry for Siebel Contact.
 
    1. Change the status from Inactive to Active.
 
    1. Under the Service Ports, update the URL below with your webserver, language, userid and password under the Address.
 
http://<webserver>/eai_<lang>/start.swe?SWEExtSource=WebService&SWEExtCmd=Execute&UserName=<UserName>&Password=<Password>
 
  1. Generate the WSDL that describes the web service and save this file. When you click the Generate WSDL button, you may get a download popup asking where you want to save the file. Change the FileName to a meaningful value such as SiebelContact.WSDL and save the file.
 
 
  1. Click the "Clear Cache" button after you have activated the inbound Web Service and clear the cache.
 
Workaround for a Siebel 7.5 change request
 
NOTE: This workaround is only required for customers testing with a Siebel 7.5 system as a web service consumer.
 
Due to a known product defect, you need to modify the WSDL before using it on any 7.5 environment.
 
After you run the WSDL Import Wizard in Siebel Tools and before it saves the objects it creates, you will get a popup with this message:
 
Method 'SetFieldValue' of business component 'Repository Business Service User Prop' (integration component 'Repository Business Service User Prop') for record with search specification '[Name] IS NULL' returned the following error:"Value too long for field 'Name' (maximum size 75).(SBL-DAT-00235)"(SBL-EAI-04375)
 
The Siebel Tools Web Service Import Wizard cannot save the proxy business service when the WSDL has long message names. These long message names cause the WSDL Import Wizard to create user property names in the proxy business service that exceeds 75 characters.
 
Change Request 12-SHZRFS has been logged to address this product defect. This behavior does not occur with Siebel version 7.7 WSDL Import Wizard.
 
The workaround is to shorten the WSDL message so that the concatenation of the message name, part name and type is less than 75 characters.
 
In order to leverage the workaround to shorten the WSDL message names, follow the steps below:
 
  1. Open up the WSDL file in a text editor application, such as Notepad.
 
  1. Execute a global search and replace (Edit -> Replace).
 
  1. Search for the following string in WSDL:
 
Siebel Contact_SiebelContact
 
and replace with the following string:
 
SiebelContact_
 
  1. The application will make 7 replacements. Save the new file.
 
Setting up a Siebel Client as a Web Service Consumer
 
On the Web Service Consumer system
 
  1. Launch Siebel Tools to import the WSDL and create the necessary objects.
 
    1. Once in Siebel Tools, launch the Web Service wizard. Go to File -> New Object -> EAI (tab) -> Web Service.
 
    1. Fill in the required fields for the WSDL Import Wizard.
 
      1. Project - A project to store business services and integration objects created. You can create a new project or use an existing project.
 
      1. WSDL Document - This is the WSDL document that is generated in the previous step.
 
      1. Runtime Data - This is a file that will be generated by the WSDL wizard. It will contain the values you will import into the Outbound Web Services Administration view.
 
      1. Log File - This is the log that will be generated by the WSDL wizard. It will contain a summary of objects created and any errors.
 
 
    1. After the wizard completes, you will have a new business service and new integration object.
 
 
In the example above from a Siebel 7.7 Tools client, the business service name is Default_Binding_SiebelContact and it has several methods such as SiebelContactDelete, SiebelContactInsert.
 
In a Siebel 7.8.x and 8.x Tools client, the business service name is Default and it has several methods such as  SiebelContactDelete, SiebelContactInsert.
 
In a Siebel 7.5 Tools client, the created business service name will be Siebel Contact_n where n is a number. An example of the new business service name is Siebel Contact_1.
 
You may change the name of the business service such as changing Default to Call Siebel Contact WS. Avoid change the business service method names.
 
 
For either version of the Tools client, you can find the name of the integration object, "ListOfContactInterfaceTopElmt", as a method argument of the proxy business service.
 
NOTE: If you are testing with a Siebel version 7.5 environment as a web service consumer, you will need to modify the integration object's properties.
 
You will need to change the cardinality property of the following:
 
Component Name
Original Cardinality
New Cardinality
ListOfContactInterfaceTopElmt
<blank>
One
/Contact
One or more
One
 
    1. Compile your changes into your client's .srf file. Remember to compile both the business service and integration object.
 
  1. To register the imported WSDL, login to the Siebel Client and go to the Web Services Administration View for Outbound Web Services. Click on the Import button and point to the Runtime Data file generated by the Import WSDL wizard.
 
 
After the import completes, query for your new registered Web Service, which will be Siebel Contact.
 
Here is a sample screenshot:
 
 
If you get any errors trying to import the XML file, make sure your Siebel client is using the .srf file with the compiled the proxy business service and integration objects from the previous step.
 
Testing Inbound WebServices With the Siebel Client
 
Business Service Simulator
 
  1. Go to the Business Service Simulator.
 
    • In Siebel 7.5, it is under Business Service Administration.
 
    • In Siebel 7.7.x, 7.8.x, and 8.x, it is under Administration - Business Service.
 
  1. In the Business Service Simulator, specify a Service Name and Method.
 
    1. Service Name - the name of the proxy business service, such as Default_Binding_Siebel Contact.
 
    1. For this test, we will use the Method Name, SiebelContactQueryById.
 
  1. To see which input arguments are required for this method, look in Siebel Tools at the business service.
 
    1. The names of the input arguments will different depending on the Siebel version you are using.
 
    1. For example, in the Siebel 7.7 Tools, under the method SiebelContactQueryById, you can see the required input argument is Siebel Contact_SiebelContactQueryById_Input:PrimaryRowId and it is of data type String.
 
 
  1. Navigate back to the Business Service simulator, click on the glyph next to the Property Name and type in the input argument name exactly as shown in Siebel Tools.
 
    1. Using the Siebel 7.7 example, you will type in Siebel Contact_SiebelContactQueryById_Input:PrimaryRowId, keeping the spacing, case and underscore characters in the Property Name field.
 
    1. For the value, supply a valid row_id, such as 0-1 for the Siebel Administrator.
 
Here is a sample screenshot from a Siebel 7.7 client:
 
 
 
  1. Click on the Run button to invoke the web service. If it is successful, you'll see data returned to the Output Arguments.
 
 
  1. Click on the Save to File button to the save the data to a file for easier viewing. You can also use this file as a starting point to determine what the input arguments for your proxy business service should look like.
 
NOTE: If you issue the save from this point, you are saving the integration object as a generic property set and not as a Siebel Message type of Property Set.
 
Workflow Process Simulator
 
Here you will repeat a similar test using a workflow process and use a different method called SiebelContactInsert:
 
  1. As before, the first step is to identify the required Input arguments for the method.
 
    1. In Siebel 8.0, the arguments are a Status Object String (SiebelContactInsert_Input:StatusObject) and the Integration Object instance (SiebelContactInsert_Input:SiebelMessage).
 
    1. In Siebel 7.7 and 7.8, the arguments are a Status Object String (SiebelContact_Insert_Input:StatusObject) and the Integration Object instance (SiebelContact_Insert_Input:SiebelMessage).
 
    1. In Siebel 7.5, the arguments are a Status Object String (SiebelContact_Insert_Input:StatusObject:string) and the Integration Object instance (SiebelContact_Insert_Input:SiebelMessage).
 
  1. If your proxy web service input arguments is an integration object, it is easiest to construct it from a sample integration object instance saved as an XML file. Alternatively, you can also write business service script to manually create the required property set.
 
  1. To construct the input data from sample data, you will need to first retrieve a sample integration object instance.
 
    1. In this case you will need to invoke the same webservice but with a different method called QueryById.
 
    1. This method will allow you to accomplish the following:
 
      1. Query for sample data
      2. Retrieve data
      3. Save the data to the output file
      4. Update the data as an XML file.
 
Here is an example a workflow that accomplishes the above:
 
 
Below are the steps for Siebel versions 7.7 and 7.5:
 
Step Name
Type
Business Service Name
Business Method Name
1. start
Start
 
 
2. Query for Contact
Business Service
<Your proxy business service name>
SiebelContactQueryById
3. Write out Contact
Business Service
EAI XML Write to File
WritePropSet
4. end
End
 
 
 
The first step queries for a contact using the SiebelContactQueryById method of the web service.
The second step writes out the data returned in an XML file. This data is being written out as a property set not as a Siebel message. It saves the response received in a process property of type integration object. The second step serializes the integration object instance to an XML document.
 
In the workflow process, add one new process property of data type Integration Object that stores the output of the Query step. For example, the process property name can be SiebelContactOutput. Here is a table showing the new process properties you need to add to this workflow process.
 
Process Property Name
Data Type
Integration Object
SiebelContactOutput
Integration Object
 
 
Below is a sample of what the arguments for the 2 steps look like in Siebel 8.x:
 
Step 2. Query for Contact
 
Input Argument
SiebelContactQueryById_Input:PrimaryRowId
Type
Literal
Value
<a row_id for a contact that exists on the web service provider>
 
Output Arg (Property Name)
SiebelContactOutput
Type
Output Argument
Output Argument
SiebelContactQueryById_Output:SiebelMessage
 
Step 3. Write out Contact
 
Input Arg
FileName
Type
Literal
Value
<full path and filename where to save the output as xml>
Process Property Name
 
 
Input Arg
Siebel Message
Type
Process Property
Value
 
Process Property Name
SiebelContactOutput
 
Below is a sample of what the arguments for the 2 steps look like in Siebel 7.7.x:
 
Step 2. Query for Contact
 
Input Argument
Siebel Contact_SiebelContactQueryById_Input:PrimaryRowId
Type
Literal
Value
<a row_id for a contact that exists on the web service provider>
 
Output Arg (Property Name)
SiebelContactOutput
Type
Output Argument
Output Argument
Siebel Contact_SiebelContactQueryById_Output:SiebelMessage
 
Step 3. Write out Contact
 
Input Arg
FileName
Type
Literal
Value
<full path and filename where to save the output as xml>
Process Property Name
 
 
Input Arg
Siebel Message
Type
Process Property
Value
 
Process Property Name
SiebelContactOutput
 
Below is a sample of what the arguments for the 2 steps look like in Siebel 7.5:
 
Step 2. Query for Contact
 
Input Argument
PrimaryRowId
Type
Literal
Value
<a row_id for a contact that exists on the web service provider>
 
Output Arg (Property Name)
SiebelContactOutput
Type
Output Argument
Output Argument
SiebelMessage
 
Step 3. Write out Contact
 
Input Arg
FileName
Type
Literal
Value
<full path and filename where to save the output as xml>
Process Property Name
 
 
Input Arg
SiebelContact_QueryById_Output:SiebelMessage
Type
Process Property
Value
 
Process Property Name
SiebelContactOutput
 
  1. Run the workflow process through the workflow process simulator. You need to simulate this workflow process to retrieve output or the XML file.
NOTE: If you have the output from the business service simulator, you would not need to run the workflow process simulator again.
 
    1. Once you have the XML file saved as a file, you need modify it so that you can use it as an inbound integration object instance. The reason is because the inbound integration object tags are different than those for an outbound integration object. You will need to change the element names so the XML will work for the Insert method. You will need to modify the element values (data content) so you insert a new contact; the easiest way to do this is to change the user key values in the data content (text in blue below).
 
    1. The XML you received from the QueryById method is in the format for the QueryByIdOutput message. So you will need to convert it to the format expected for the Insert_Input message (note, not necessary for Siebel 8.x, as the tag is Siebel_spcMessage, and does not specify input or output in it's name).
 
    1. You will make this change twice (for the opening and closing elements).
 
      1. For a Siebel 7.7 test, change this tag from:
 
Siebel_spcContact_undSiebelContactQueryById_undOutput_clnSiebelMessage
 
to:
 
Siebel_spcContact_undSiebelContactInsert_undInput_clnSiebelMessage
 
      1. For a Siebel 7.5 test, change this tag from:
 
SiebelContact_undQueryById_undOutput_clnSiebelMessage
 
to:
 
SiebelContact_undInsert_undInput_clnSiebelMessage
 
    1. Then make additional changes so that the record is unique by changing the attribute data, for example the values for FirstName, Id, and LastName. You may also want to remove any other information you do not want to insert such as personal address.
 
    1. Below is the text of a modified file for Siebel version 7.7. Please note that this XML will be different depending on your Siebel version so if your XML does not match this one exactly, it is not necessarily an error.
 
<?xml version="1.0" encoding="UTF-8"?><?Siebel-Property-Set EscapeNames="true"?><PropertySet><Siebel_spcContact_undSiebelContactInsert_undInput_clnSiebelMessage MessageId="" MessageType="Integration Object" IntObjectName="ListOfContactInterfaceTopElmt" IntObjectFormat="Siebel Hierarchical">
<ListOfListOfContactInterfaceTopElmt>
<ListOfContactInterfaceTopElmt>
<ListOfListOfContactInterface>
<ListOfContactInterface>
<ListOfContact>
<Contact
BirthDate="01/01/1950 00:00:00"
 FirstName="Siebel"
 EmailAddress="support@siebel.com"
 LastName="Support"
WorkPhone="8002140400"
 MiddleName="Technical">
</Contact>
</ListOfContact>
</ListOfContactInterface>
</ListOfListOfContactInterface>
</ListOfContactInterfaceTopElmt>
</ListOfListOfContactInterfaceTopElmt>
</Siebel_spcContact_undSiebelContactInsert_undInput_clnSiebelMessage>
</PropertySet>
 
The same content will work for Siebel 7.5 after you change the tag from:
 
Siebel_spcContact_undSiebelContactInsert_undInput_clnSiebelMessage
 
to:
 
SiebelContact_undInsert_undInput_clnSiebelMessage.
 
  1. Now that you have the sample data, you can build a Workflow Process that will invoke the SiebelContactInsert method.
 
 
Step Name
Type
Business Service Name
Business Method Name
1. start
Start
 
 
2. Read in Property Set
Business Service
EAI XML Read from File
ReadPropSet
3. Invoke WS (Insert)
Business Service
<Your proxy business service name>
SiebelContactInsert
4. end
End
 
 
 
The process properties for this workflow process must be created to match the input and output argument names defined in your proxy business service's methods. This step is key to successfully invoking the web service because if the process property names do not match, the proxy business service will not generate the correct input to web service. To ensure you get the case and spelling correct, copy and paste the input and output argument names directly from the Siebel Tools business service definition.
 
For example, if you have Siebel 7.7 as the consumer client, the SiebelContactInsert method has these input and output arguments:
 
      • Siebel Contact_SiebelContactInsert_Input:SiebelMessage (an integration object)
 
      • Siebel Contact_SiebelContactInsert_Input:StatusObject (a string)
 
      • Siebel Contact_SiebelContactInsert_Output:SiebelMessage (an integration object)
 
It is not necessary to create a process property for the String data so you only need to create process property for the integration object data.
 
Process Property Name
Data Type
Integration Object
Siebel Contact_SiebelContactInsert_Input:SiebelMessage
Integration Object
ListOfContactInterfaceTopElmt
Siebel Contact_SiebelContactInsert_Output:SiebelMessage
Integration Object
ListOfContactInterfaceTopElmt
 
If Siebel 7.5 is the consumer client, the SiebelContactInsert method will have the following input and output arguments:
 
      • SiebelContact_Insert_Input:SiebelMessage (an integration object)
 
      • SiebelContact_Insert_Input:StatusObject (a string)
 
      • SiebelContact_Insert_Output:SiebelMessage (an integration object)
 
It is not necessary to create a process property for the String data, so you only need to create process property for the integration object data.
 
Process Property Name
Data Type
Integration Object
SiebelContact_Insert_Input:SiebelMessage
Integration Object
ListOfContactInterfaceTopElmt
SiebelContact_Insert_Output:SiebelMessage
Integration Object
ListOfContactInterfaceTopElmt
 
Below is a sample of what the arguments for the 2 steps look like in Siebel version 7.7.x:
 
Step 2. Read in Property Set
 
Input Argument
FileName
Type
Literal
Value
<full path and filename of the modified input file>
 
Property Name
Siebel Contact_SiebelContactInsert_Input:SiebelMessage
Type
Output Argument
Value
 
Output Argument
 
 
Step 3. Invoke WS (Insert)
 
Input Argument
Siebel Contact_SiebelContactInsert_Input:SiebelMessage
Type
Process Property
Value
 
Property Name
Siebel Contact_SiebelContactInsert_Input:SiebelMessage
 
Input Argument
Siebel Contact_SiebelContactInsert_Input:StatusObject
Type
Literal
Value
True
Property Name
 
 
Property Name
Siebel Contact_SiebelContactInsert_Output:SiebelMessage
Type
Output Argument
Value
 
Output Argument
Siebel Contact_SiebelContactInsert_Output:SiebelMessage
 
NOTE: The output argument value is blank in step 2.
 
Below is a sample of what the arguments for the 2 steps look like in Siebel version 7.5:
 
Step 2. Read in Property Set
 
Input Argument
FileName
Type
Literal
Value
<full path and filename of the modified input file>
 
Property Name
SiebelContact_Insert_Input:SiebelMessage
Type
Output Argument
Value
 
Output Argument
 
 
Step 3. Invoke WS (Insert)
 
Input Argument
SiebelMessage
Type
Process Property
Value
 
Property Name
SiebelContactInsert_Input:SiebelMessage
 
Input Argument
StatusObject
Type
Literal
Value
True
Property Name
 
 
Property Name
SiebelContactInsert_Output:SiebelMessage
Type
Output Argument
Value
 
Output Argument
SiebelMessage
 
  1. Run the workflow process through the workflow process simulator. You need to simulate this workflow process to retrieve output or the XML file.
 
If you get an error, check the error message text. You can also see the next section called Using Siebel service argument tracing to capture the SOAP message and for troubleshooting.
 
Upon successful invocation, you will get a status object back with the Row Id of the record you just created. Here is what the process property or Watch Window data will look like:
 
 
  1. You can verify the record was successfully created by logging in with the Siebel client on your Web Service Provider machine. Run a query for the new contact that has the Row_ID of the record you got back from the workflow process simulator.
 
Using Siebel Service Argument Tracing To Capture the SOAP Message and for Troubleshooting
 
Within the Siebel Web Services framework, there are existing and new component events that you can enable that help you troubleshoot problems and capture the Simple Object Access Protocal (SOAP) messages exchanged.
 
For a list of web services specific component events, see Integration Platform Technologies: Siebel EAI (Vol 2) > Web Services > Enabling Web Services Tracing.
 
By enabling the WebSvcOutboundArgTrc (Web Service Outbound Argument Tracing) and WebSvcInboundArgTrc (Web Service Inbound Argument Tracing) events, you can capture the inbound and outbound SOAP messages generated.
 
Testing with a Dedicated Siebel Client
 
You can enable the events by modifying your client .cfg file and starting your Siebel client with logging enabled.
 
For the dedicated client, add the following entries to your client's .cfg file:
 
[EAISubsys]
EnableServiceArgTracing = TRUE
 
Then start your Siebel Client or Siebel Tools client with the environment variables SIEBEL_LOG_EVENTS=ALL and SIEBEL_LOG_DIR=<directory of your choice> set.
 
Testing with a Siebel Thin Client and for Siebel Server That Your Web Service Provided
 
You need to enable the events on the client's object manager such as the SCCObjMgr_enu for Call Center and the EAIObjmgr for the web service provider. In srvrmgr, the commands are:
 
change param enableserviceargtracing=true for comp eaiobjmgr_enu
change evtloglvl %=5 for comp eaiobjmgr_enu
 
NOTE: You may choose to enable additional component events, such as the EAI Siebel Adapter or EAISiebAdpt. By using the % wildcard, you can enable all commands that start with WebSvc.
 
Logs Generated
 
On the web service consumer application, you should these file created by the WebService dispatcher when you run your application invoking the web service:
 
OutboundDispatcher_input_args_<pid>.dmp
OutboundDispatcher_output_args_<pid>.dmp
 
The outut_args log shows your SOAP request and the input_args log shows the SOAP response. The SOAP response may be a SOAP fault message or empty file if your SOAP request was not valid.
 
On the server, if your request is successfully received and processed, you will see these two additional logs:
 
InboundDispatcher_input_args_<pid>.dmp
InboundDispatcher_output_args_<pid>.dmp
 
The input_args log shows the inbound SOAP request received and the output_args log shows the SOAP response sent out. The SOAP response may be a SOAP fault message if your inbound request was not valid.
 
Sample SOAP Messages
 
This is a sample SOAP request for the SiebelContact ASI:
 
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
  <rpc:SiebelContactInsert xmlns:rpc="http://siebel.com/asi/">
  <SiebelMessage xmlns:ns="http://www.siebel.com/xml/Contact Interface" xsi:type="ns:ListOfContactInterfaceTopElmt">
  <ListOfContactInterface xmlns:ns="http://www.siebel.com/xml/Contact Interface" xmlns:ns0="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns:ListOfContactInterface">
  <Contact xsi:type="ns:Contact">
  <BirthDate xsi:type="ns0:string">01/01/1950 00:00:00</BirthDate>
  <EmailAddress xsi:type="ns0:string">support@siebel.com</EmailAddress>
  <FirstName xsi:type="ns0:string">Siebel</FirstName>
  <LastName xsi:type="ns0:string">Support</LastName>
  <MiddleName xsi:type="ns0:string">Technical</MiddleName>
  <WorkPhone xsi:type="ns0:string">8002140400</WorkPhone>
  </Contact>
  </ListOfContactInterface>
  </SiebelMessage>
  <StatusObject xsi:type="xsd:string">true</StatusObject>
  </rpc:SiebelContactInsert>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>
 
This is a sample SOAP response:
 
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
  <rpc:SiebelContactInsertResponse xmlns:rpc="http://siebel.com/asi/">
  <SiebelMessage xmlns:ns="http://www.siebel.com/xml/Contact Interface" xsi:type="ns:ListOfContactInterfaceTopElmt">
  <ListOfContactInterface xmlns:ns="http://www.siebel.com/xml/Contact Interface" xmlns:ns0="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns:ListOfContactInterface">
  <Contact xsi:type="ns:Contact" operation="insert">
  <Id xsi:type="ns0:string">42-4NZB7</Id>
  <IntegrationId xsi:type="ns0:string" />
  </Contact>
  </ListOfContactInterface>
  </SiebelMessage>
  </rpc:SiebelContactInsertResponse>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>
 
This is a SOAP response with an error:
 
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>Service Method arguments property set has no children, should have one child of type 'SiebelMessage'(SBL-EAI-04022)</faultstring>
<detail>
<siebelf:errorstack xmlns:siebelf="http://www.siebel.com/ws/fault"><siebelf:error>
<siebelf:errorsymbol></siebelf:errorsymbol><siebelf:errormsg>Service Method arguments property set has no children, should have one child of type 'SiebelMessage'(SBL-EAI-04022)</siebelf:errormsg></siebelf:error></siebelf:errorstack>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
 
In the above case, the error message is returned from the the Siebel Contact ASI business service on the web services provider because the input data was incomplete. The corresponding inbound SOAP message from the above example shows that incomplete input arguments were provided. There is only a value for the StatusObject argument and no Contact data.
 
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<rpc:SiebelContactInsert xmlns:rpc="http://siebel.com/asi/">
<StatusObject xsi:type="xsd:string">true</StatusObject>
</rpc:SiebelContactInsert>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
 
The reason the message was incomplete is because the input arguments supplied to the web service proxy business service were wrong. So as a result the proxy business service did not know how to generate the expected input arguments for the web service.

1 comment:

  1. Great Post! It's very nice to read this info from someone that actually knows what they are talking about. real estate notes for sale

    ReplyDelete