cancel
Showing results for 
Search instead for 
Did you mean: 

Cannot generate proxy (object missing in WSDL)

Former Member
0 Kudos

Hi folks,

Once again, my apology for this thread isn’t 100% XI forum related. But, continuing with this issue…

As you can see on my earlier post

I’m trying to consume an external web service. Following Michal’s suggestion I have checked the WSDL in debug mode and I found some irregularities on it. It seams this WSDL doesn’t describe the whole interface correctly. Looking to Diagnosis, I see an object <b>"<message name="listaCodSig0Request"> <part name..."</b> that is linked to an empty object, or either, doesn’t exist in the WSDL document!!!

<i>“ABAP proxy generation expects that all directly and indirectly referenced objects are in the WSDL document. Therefore, no proxy can be generated for this WSDL and the system displays an error message.”</i>

It seams that this web service was developed through messages with several parts. Searching in http://service.sap.com I found a document <u>XSDandWSDL_XI30SP11.xls</u> with supported XML schema and WSDL. In this doc I can see that messages with several parts are not supported!!!

I would like to know how can I workaround this issue. Is it possible replace these elements<b> “part name= “</b> with other supported elements in the WSDL document and without changes on the web service? I’m asking this because this external web service are working well with other third party client applications and is not supposed perform any changes on that.

I tried to replace <b>“part name= “</b> to <b>“part element= “</b>, but it doesn’t work! “Proxy generation terminated: WSDL error (object part without name)…

Anyone knows which elements I should use in replace of these unsupported elements and which procedures I need to taking into account?

Thanks in advance,

Ricardo.

Accepted Solutions (0)

Answers (1)

Answers (1)

henrique_pinto
Active Contributor
0 Kudos

Hey Ricardo,

It'd help us to help you if you posted the .wsdl file (don't know if it is possible for you though...).

Regards,

Henrique.

Former Member
0 Kudos
  <?xml version="1.0" encoding="utf-8" ?> 
- <!-- Generated by the Oracle JDeveloper 10g Web Services WSDL Generator
  --> 
- <!-- Date Created: Wed Nov 08 12:01:03 GMT 2006
  --> 
- <definitions name="Moradas_Edificios" targetNamespace="http://alcor.cm-lisboa.net:7777/CML-SRUs-context-root/Moradas_Edificios.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://alcor.cm-lisboa.net:7777/CML-SRUs-context-root/Moradas_Edificios.wsdl" xmlns:ns1="http://db_cml_alcor_mgb/Moradas_Edificios.xsd">
- <types>
- <schema targetNamespace="http://db_cml_alcor_mgb/Moradas_Edificios.xsd" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
- <complexType name="db_cml_alcor_mgb_TabMoradaEdif" jdev:packageName="db_cml_alcor_mgb" xmlns:jdev="http://xmlns.oracle.com/jdeveloper/webservices">
- <all>
  <element name="array" type="ns1:ArrayOfdb_cml_alcor_mgb_MoradaEdifUser" /> 
  </all>
  </complexType>
- <complexType name="db_cml_alcor_mgb_MoradaEdifUser" jdev:packageName="db_cml_alcor_mgb" xmlns:jdev="http://xmlns.oracle.com/jdeveloper/webservices">
- <all>
  <element name="codSig" type="string" /> 
  <element name="desigLocal" type="string" /> 
  <element name="codLocal" type="string" /> 
  <element name="nrPol" type="string" /> 
  <element name="nome" type="string" /> 
  <element name="nrObraConstrucao" type="string" /> 
  <element name="freguesia" type="string" /> 
  <element name="areaGestao" type="string" /> 
  </all>
  </complexType>
- <complexType name="ArrayOfdb_cml_alcor_mgb_MoradaEdifUser" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
  <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="ns1:db_cml_alcor_mgb_MoradaEdifUser[]" /> 
  </restriction>
  </complexContent>
  </complexType>
  </schema>
  </types>
- <message name="listaCodSig0Request">
  <part name="pDesigLocal" type="xsd:string" /> 
  </message>
- <message name="listaCodSig0Response">
  <part name="return" type="ns1:db_cml_alcor_mgb_TabMoradaEdif" /> 
  </message>
- <portType name="Moradas_EdificiosPortType">
- <operation name="listaCodSig">
  <input name="listaCodSig0Request" message="tns:listaCodSig0Request" /> 
  <output name="listaCodSig0Response" message="tns:listaCodSig0Response" /> 
  </operation>
  </portType>
- <binding name="Moradas_EdificiosBinding" type="tns:Moradas_EdificiosPortType">
  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> 
- <operation name="listaCodSig">
  <soap:operation soapAction="" style="rpc" /> 
- <input name="listaCodSig0Request">
  <soap:body use="encoded" namespace="Moradas_Edificios" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> 
  </input>
- <output name="listaCodSig0Response">
  <soap:body use="encoded" namespace="Moradas_Edificios" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> 
  </output>
  </operation>
  </binding>
- <service name="Moradas_Edificios">
- <port name="Moradas_EdificiosPort" binding="tns:Moradas_EdificiosBinding">
  <soap:address location="http://alcor.cm-lisboa.net:7777/CML-SRUs-context-root/Moradas_Edificios" /> 
  </port>
  </service>
  </definitions>

Thanks a lot.

Regards,

Ricardo.

henrique_pinto
Active Contributor
0 Kudos

Hey Ricardo,

First of all, when I tried to save your wsdl in XMLSpy, it complained about the empty soapaction declaration in the <operation> tag. I had to remove the line

<soap:operation soapAction="" style="rpc" />

in order to make it work in XMLSpy. It would be a good idea to check that out with the developers of the wsdl.

Anyway, after I removed that tag, I start comparing your wsdl to a common Message Interface wsdl generated by XI. By doing that, I have found out that the <part> element in XI has a name and also refers to an existing element, which was previously defined in the <schema> group.

I've made some modifications, you could try it, but I have found an issue about this approach. With your wsdl, the soap request message has a <listaCodSig> tag with namespace "http://db_cml_alcor_mgb/Moradas_Edificios.xsd", and inside it, you have a <pDesignLocal> tag with no namespace defined.

If you use the modificated wsdl below, both <listaCodSig> and <pDesignLocal> tags have namespace as "http://db_cml_alcor_mgb/Moradas_Edificios.xsd", and I think that'll cause issues in your server application. But you can try it out, playing with the wsdls, if you can remove the definition there.

The modificated wsdl is below (changed parts in bold).

<?xml version="1.0" encoding="utf-8"?>

<!-- Generated by the Oracle JDeveloper 10g Web Services WSDL Generator -->

<!-- Date Created: Wed Nov 08 12:01:03 GMT 2006 -->

<definitions

xmlns="http://schemas.xmlsoap.org/wsdl/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:tns="http://alcor.cm-lisboa.net:7777/CML-SRUs-context-root/Moradas_Edificios.wsdl"

xmlns:ns1="http://db_cml_alcor_mgb/Moradas_Edificios.xsd"

name="Moradas_Edificios"

targetNamespace="http://alcor.cm-lisboa.net:7777/CML-SRUs-context-root/Moradas_Edificios.wsdl">

<types>

<schema

xmlns="http://www.w3.org/2001/XMLSchema"

xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"

targetNamespace="http://db_cml_alcor_mgb/Moradas_Edificios.xsd">

<b><element name="pDesignLocal" type="xsd:string"/>

<element name="return" type="ns1:db_cml_alcor_mgb_TabMoradaEdif"/></b>

<complexType name="db_cml_alcor_mgb_TabMoradaEdif"

jdev:packageName="db_cml_alcor_mgb"

xmlns:jdev="http://xmlns.oracle.com/jdeveloper/webservices">

<all>

<element name="array"

type="ns1:ArrayOfdb_cml_alcor_mgb_MoradaEdifUser"/>

</all>

</complexType>

<complexType name="db_cml_alcor_mgb_MoradaEdifUser"

jdev:packageName="db_cml_alcor_mgb"

xmlns:jdev="http://xmlns.oracle.com/jdeveloper/webservices">

<all>

<element name="codSig" type="string"/>

<element name="desigLocal" type="string"/>

<element name="codLocal" type="string"/>

<element name="nrPol" type="string"/>

<element name="nome" type="string"/>

<element name="nrObraConstrucao" type="string"/>

<element name="freguesia" type="string"/>

<element name="areaGestao" type="string"/>

</all>

</complexType>

<complexType name="ArrayOfdb_cml_alcor_mgb_MoradaEdifUser"

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

<complexContent>

<restriction base="SOAP-ENC:Array">

<attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="ns1:db_cml_alcor_mgb_MoradaEdifUser[]"/>

</restriction>

</complexContent>

</complexType>

</schema>

</types>

<message name="listaCodSig0Request">

<b><part name="pDesigLocal" element="ns1:pDesignLocal"/></b>

</message>

<message name="listaCodSig0Response">

<b><part name="return" element="ns1:return"/></b>

</message>

<portType name="Moradas_EdificiosPortType">

<operation name="listaCodSig">

<input name="listaCodSig0Request" message="tns:listaCodSig0Request"/>

<output name="listaCodSig0Response" message="tns:listaCodSig0Response"/>

</operation>

</portType>

<binding name="Moradas_EdificiosBinding" type="tns:Moradas_EdificiosPortType">

<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

<operation name="listaCodSig">

<input name="listaCodSig0Request">

<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="Moradas_Edificios"/>

</input>

<output name="listaCodSig0Response">

<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="Moradas_Edificios"/>

</output>

</operation>

</binding>

<service name="Moradas_Edificios">

<port name="Moradas_EdificiosPort" binding="tns:Moradas_EdificiosBinding">

<soap:address location="http://alcor.cm-lisboa.net:7777/CML-SRUs-context-root/Moradas_Edificios"/>

</port>

</service>

</definitions>

Regards,

Henrique.

Former Member
0 Kudos

Hi Henrique,

Thanks a lot for your quick answer

It works with XMLSpy, but when I try to upload this wsdl into WAS I got errors, it seams there is an object that isn’t defined or maybe is defined but in a wrong namespace.

In the WSDL document, the object

"<complex/simpleType name="ArrayOfdb_cml_alcor_m..."

from the namespace

"http://db_cml_alcor_mgb/Moradas_Edificios.xsd"

links to the object

"<attribute name="arrayType">"

from the namespace

"http://schemas.xmlsoap.org/soap/encoding/"

If you want you could check it - transaction se80, over the package name press right button and go to Create > Enterprise Service / Web Service > Proxy object; chose “Local File” to upload the wsdl and fill the package name and a prefix e.g. “Z”… and you will get the same error!

About the empty soap action, thanks I will discuss it with web services team.

But, I’m confused… Is it not supposed that this kind of features has 100% SAP WAS compliant? Even with WSDLs as document type or rpc type?

Once again, thanks a lot for your help.

Regards,

Ricardo.

henrique_pinto
Active Contributor
0 Kudos

Hey Ricardo,

I found out something that might help.

I imported the .wsdl in IR and checked out messages tab but the messages weren't there.

That was really strange.

Then I tried to manipulate the .wsdl and found out that if I reduced the length of the main namespace, then the messages appeared.

Thus, I think that the namespace "http://alcor.cm-lisboa.net:7777/CML-SRUs-context-root/Moradas_Edificios.wsdl" has a larger length then maximum namespace length supported by XI.

Try to reduce it and see if you can create proxy in SE80.

Regards,

Henrique.

Former Member
0 Kudos

Hi Henrique,

You are right, I tested in XI and the messages don’t appear until I reduced the namespace length. But this is not the real problem, I checked within WAS and I don’t have any problem with namespaces lengt here, however I have problems with an object/element, it seams that is lost the link to the refereced object.

After your modifications I got this error message:

In the WSDL document, the object

<b>"<complex/simpleType name="ArrayOfdb_cml_alcor_m..."</b>

from the namespace

<b>"http://db_cml_alcor_mgb/Moradas_Edificios.xsd"</b>

links to the object

<b>"><attribute name="arrayType">"</b>

from the namespace

<b>"http://schemas.xmlsoap.org/soap/encoding/"</b>

However, this last object does not exist in the WSDL document.

Do you know what’s happening?

Thanks in advance,

Ricardo.

Former Member
0 Kudos

Ricardo,

In XI you should not have the namespace length more than 50 at any time. Check this out which may resolve your issue.

---Satish

Former Member
0 Kudos

Hi Satish,

Thanks but I already checked and I've no problem with namespace lenght on WAS.

Regards,

Ricardo.

henrique_pinto
Active Contributor
0 Kudos

Ricardo,

my last sugestion would be if you checked the supported wsdl elements document, in sap service marketplace:

https://sap.service.com/xi -> Media Library -> Documentation -> SAP XI 3.0 (SP11) - Supported XML Schema and WSDL (EN)

Regards,

Henrique.

Former Member
0 Kudos

Hi Henrique,

Thank you, but I already have checked this document.

I opened an oss message regarding this issue and I'm waiting an answer. However, there is a note (1046046) that handles this kind of problems. Unfortunatly, for that note others are required and I'm unable to implement them because one of them requires objects that will be provided with support package 13 of NW04s.

I hope an OSS answer during this next week. Once again, thanks a lot for your help and when I have the solution I'll post it here

Cheers,

Ricardo.