יום שני, 11 באפריל 2011

SBL-EAI-08007: Message '%1' with part '%2' refers to schema using type='%3'. For use='literal', parts should refer to schema using 'element'.


Applies to: Error Message Area:Application Integration Infrastructure, Enterprise Application Interfaces - EAI
Version:Siebel 8.1

PurposeThis document is intended to provide cause and corrective action information about Siebel Error Message SBL-EAI-08007: Message '%1' with part '%2' refers to schema using type='%3'. For use='literal', parts should refer to schema using 'element'.

ScopeThis document is informational and intended for any user.

SBL-EAI-08007: Message '%1' with part '%2' refers to schema using type='%3'. For use='literal', parts should refer to schema using 'element'.ExplanationWhen SOAP binding is used with use=""literal"", message parts are only supported with element=""element qualified name"". A reference to a type from a part is not supported for use=""literal"".

Corrective ActionMake sure that only supported part definitions are used.













































Applies to: Siebel System Software - Version: 8.1.1 SIA [21111] - Release: V8

Information in this document applies to any platform.

SymptomsWhen importing a WSDL with the Web Service Import Wizard the following errors occur and the Proxy Business Service and Integration Objects (IO) created are not complete.

ERROR:

Following are warnings generated in the process:
Port 'CCMSLOVService_Port' can not be imported. PortType 'WSCCMSLOVService' can not be imported. The http://schemas.xmlsoap.org/wsdl/:operation 'getLOVs' was ignored. Message 'http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/messages:getLOVsRequest' with part 'http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/messages:lovType' refers to schema using type='http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/enum:LOVTypeEnum'. For use='literal', parts should refer to schema using 'element'.(SBL-EAI-08007)

The http://schemas.xmlsoap.org/wsdl/:operation 'getLOVsByParentKey' was ignored. Message 'http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/messages:getLOVsByParentKeyRequest' with part 'http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/messages:lovType' refers to schema using type='http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/enum:LOVTypeEnum'. For use='literal', parts should refer to schema using 'element'.(SBL-EAI-08007)

The http://schemas.xmlsoap.org/wsdl/:operation 'ping' was ignored. Message 'http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/messages:pingRequest' with part 'http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/messages:PingInput' refers to schema using type='http://www.w3.org/2001/XMLSchema:int'. For use='literal', parts should refer to schema using 'element'.(SBL-EAI-08007)

.(SBL-EAI-04331)

CauseThis issue was caused because the WSDL and imported XSDs are defining the binding of the operations as Document-Literal but most of the message parts are incorrectly defined using the “type” elements instead of using the “elemenent” element required by the binding type.

Below are two examples, one of a failing and non-failing message parts from the WSDL and corresponding XSD files where it is possible to see that the “type” element is used on the failing message:

Failing:

<wsdl:message name="getLOVsRequest">
<wsdl:part name="lovType" type="enum:LOVTypeEnum"/>
</wsdl:message>

Non-Failing:

<wsdl:message name="getCMRsResponse">
<wsdl:part name="parameters" element="vo:CMRResult"/>
</wsdl:message>

Since the binding of the operations on the WSDL is set to Document-Literal, all message parts must be defined as “element” and not “type” as the customer’s WSDL was defining them.

The following excerpt from the W3C WSDL specification confirms the above:

“If use is literal, then each part references a concrete schema definition using either the element or type attribute. In the first case, the element referenced by the part will appear directly under the Body element (for document style bindings) or under an accessor element named after the message part (in rpc style).”
(http://www.w3.org/TR/wsdl)

SolutionTo correct your WSDL in order to make Siebel import the WSDL correctly and create all the Integration Object required, please proceed with the following:

1) On the Web Service Import Wizard’s log file, find which messages were failing by searching for the following line:

Message 'http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/messages:getLOVsByParentKeyRequest'

The name of the message is the string after the “messages:” namespace.

As an example, the error below is for the message called “getLOVsByParentKeyRequest”.

The http://schemas.xmlsoap.org/wsdl/:operation 'getLOVsByParentKey' was ignored. Message 'http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/messages:getLOVsByParentKeyRequest' with part 'http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/messages:lovType' refers to schema using type='http://w3.ibm.com/xmlns/ibmww/ci/ccms/v1.4/enum:LOVTypeEnum'. For use='literal', parts should refer to schema using 'element'.(SBL-EAI-08007)

2) Once you found the message that is failing, find its definition on the WSDL or XSDs. In the above case, the message definition is on the file “CCMSSvc214_Messages.wsdl” and is shown below:

<wsdl:message name="getLOVsByParentKeyRequest">
<wsdl:part name="lovType" type="enum:LOVTypeEnum"/>
<wsdl:part name="parentType" type="enum:LOVTypeEnum"/>
<wsdl:part name="parentKey" type="xsd:string"/>
</wsdl:message>

As you can see, all of its parts are defined using “type” instead of “element”.

3) Now it is necessary that an element for those parts is created and defined on the schema. To do so, create the following lines inside the “<xsd:schema>” tag of the same file:

<!-- following was added to avoid SBL-EAI-08007 -->
<xsd:element name="LOVTypeEnum" type="enum:LOVTypeEnum">
</xsd:element>
<xsd:element name="parentKey" type="xsd:string">
</xsd:element>

The “type” of the above lines should be the exact same type defined on the message part you are changing.
The “name” can be anything, but for easy of understanding I suggest you use for complex types the same name of the type removing the namespace. In the above case it is “LOVTypeEnum”. By using the same name of the “type” you will be able to reuse this definition which will make the WSDL much smaller and will also make Siebel create less Integration Objects as it will also reuse the same definition.

For simple types like “string” and “int” I suggest you use the name of the argument as the “name” for easy of understanding. Of course you could use “string” as its name and you would be able to reuse it on other message parts and also make Siebel reuse the corresponding Integration Objects.

4) After adding the above to the schema, it is necessary to change the message parts definition to reflect the change. Below is the changed version of the above mentioned message part:

<wsdl:message name="getLOVsByParentKeyRequest">
<!-- following was changed to avoid SBL-EAI-08007 -->
<wsdl:part name="lovType" element="impl:LOVTypeEnum"/>
<wsdl:part name="parentType" element="impl:LOVTypeEnum"/>
<wsdl:part name="parentKey" element="impl:parentKey"/>
</wsdl:message>

As you can see above, the “type” element was changed to “element” and its value was changed to “impl:<name of the element>”, where “<name of the element>” is the name of the element you created on the schema from step 3.

5) The above process must be done for each message part that is failing.

I have confirmed the above solves the WSDL import issue on my environment by changing the above message parts and leaving the others untouched. The Web Service import Wizard log did not complain anymore about the 'getLOVsByParentKey' operation or its message parts.

Thank you,
Oracle Technical Support












Related







Products








Siebel > Customer Relationship Management > CRM - Enterprise Edition > Siebel System Software


Keywords






 

WSDL; NAMESPACE; WEB SERVICES; TAG; SPECIFICATION; RPC; LITERAL; XSD

 

Errors





 

SBL-EAI-08007; SBL-EAI-04331





אין תגובות:

הוסף רשומת תגובה