cancel
Showing results for 
Search instead for 
Did you mean: 

SOAP setup

Former Member
0 Kudos

Hello xi expert,

I need to setup communication channel using SOAP adapter.(integration builder->business service->new service using SOAP adapter). It requires URL address of the SOAP adapter. I think the URL address of our current SOAP is xi itself. How do I find the URL address of the SOAP adapter in the system?

Many thanks

Jack

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi,

For soap receiver adapter (where XI is a client requesting soap service), the target URL is obtained from the WSDL given to you by the soap service provider.

For soap sender adapter (where XI is a provider of soap service), you must generate a WSDL in the Integration Directory to give to the client who wants to use it. For this, during the WSDL generation, you should override the default with:

http://server:50000/XISOAPAdapter/MessageServlet?query

where query-> channel=party:service:sender_agreement

(note: the port 50000 is the default, yours maybe different)

Regards,

Bill

Former Member
0 Kudos

Thanks Bill,

I read the same thing from help file and applied the following in the URL.

http://<server>:8000/XISOAPAdapter/MessageServlet?channel=:service:channel

I don't have party so the query session is channel=:service:channel.

I have issue with sender agreement. The interface and service is not available. Any reasons why we can not see the interface when we create sender agreement?

Former Member
0 Kudos

If you are on XI 3.0 and use the AFW of the J2EE then it is definitely the java port 50000 plus instance number if not 00 not the ABAP Port.

Further when you create the sender agreement you have put in the communication channel, therefore your interface needs to be an interface of type outbound for a sender adapter. That means your calling system is the outbound since it sends the WS request to XI. Don't forget to put a Default Interface Namespace and Interface Name in the communication channel but there is no dropdown for that, so just copy and past it out of the repository.

One other problem I had was that I handed the payload to a ccBPM and therefore the namespace of the payload had to be the namespace of the abstract interface. I used XMLSPY 2005 as soap client as it can read the WSDL from XI(after export) and send the request to XI.

Cheers

Stefan

Former Member
0 Kudos

Folks,

I have a scenario SOAP client -> XI 3.0

I am using XI 3.0 and the J2EE adapter framework to configure a sender SOAP adapter. I do not have a Party, just the service and the channel.

I tried using the following url format:

http://<server>:50000/XISOAPAdapter/MessageServlet?channel

=:<service name>:<channel name>

When I use this in my SOAP client , I get an 401 forbidden error in the browser. However when I type this url directly in the browser and I get:

Message Servlet is in Status OK

Status information:

Servlet com.sap.aii.af.mp.soap.web.MessageServlet (Version $Id: //tc/aii/30_REL/src/_adapters/_soap/java/com/sap/aii/af/mp/soap/web/MessageServlet.java#5 $) bound to /MessageServlet

Classname ModuleProcessor: null

Lookupname for localModuleProcessorLookupName: localejbs/ModuleProcessorBean

Lookupname for remoteModuleProcessorLookupName: null

ModuleProcessorClass not instantiated

ModuleProcessorLocal is Instance of com.sap.aii.af.mp.processor.ModuleProcessorLocalLocalObjectImpl0

ModuleProcessorRemote not instantiated

A couple of questions:

1. Inspite of configuring the sender SOAP adapter, the sender service and the interface, I still cannot see the green light for the SOAP adapter in rumtime workbench->adapter monitoring.

Although the communication channel (in intergration builder- design)shows the status of the adapter as "active"

Does this mean that my SOAP adapter is correctly configured and active?

2. The above mentioned url takes the ABAP engine login/password while the J2EE engine (AFW)takes a different login/password. Which authentication should the SOAP client use?

Thanks for your help!

Shailesh

Former Member
0 Kudos

Hi,

I'm doing the exact same scenario and mine works, I'm on XI 3.0 SP10.

The green light on the file adapter monitor turns only green after the first successful posting to the AFW for the SOAP Adapter as it cannot check anything, keep in mind it waits for a request to come in.

I did the URL too and get the same result. Then I used a SOAP Client not the one from but XMLSPY 2005 to post the request and that one ask me for user and password. I entered my XI user name and password and it posted the request to XI.

The WSDL I got from the IR generated was wrong.

Are you sure that the SOAP envelope is ok, e.g. the soap action is http://sap.com/xi/WebService/soap1.1

The only problem I had at the beginning was the put the right namespace into the soap body as I use a ccBPM to receive the SOAP call and it was not the namespace of the outbound interface but the abstract one. Further in the CC you have to fill in the Default XI Parameter for Interface Name and Namespace and I'm using there the namespace from the outbound interface.

I hope it helps

Cheers

Stefan

Former Member
0 Kudos

Hi Stefan!

Thanks for your help. I fixed the problem partially. I did not have the authentication set in my SOAP client. As a result, I couldnt reach the adapter. Now I can reach the adapter and also see the green light for the SOAP adapter in the runtime workbench-> adapter monitoring.

Now my problem is the WSDL. The IR shows a WSDL for the message interface which has an operation name. In my case the operation name is "messageint2"

When I try to use this operation name my SOAP client, I get a "<b>failed to call the adapter engine</b> " error in the browser.

This is the code for my SOAP client:



  Service  service = new Service();
			   Call     call    = (Call) service.createCall();
			   call.setTargetEndpointAddress( new java.net.URL(endpoint) );
			   call.setUsername("sapuser1");
			   call.setPassword("******");
			   call.setOperationName( "messageint2" );
			   call.addParameter( "supname", XMLType.XSD_STRING, ParameterMode.IN );
			   call.addParameter( "suppnum", XMLType.XSD_STRING, ParameterMode.IN );
			   call.setReturnType( XMLType.XSD_STRING );

			   String ret = (String) call.invoke( new Object [] { supname, supnumber });
			      
				out.println("Got result : " + ret);

<b>And heres the wsdl:</b>



?xml version="1.0" encoding="ISO-8859-1"?>

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:p1="http://miraclesoft/scenario2/soap/" name="messageint2" targetNamespace="http://miraclesoft/scenario2/soap/">
	<wsdl:types>
		<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://miraclesoft/scenario2/soap/" targetNamespace="http://miraclesoft/scenario2/soap/">
			<xsd:element name="messagetype2" type="outputparameters" />
			<xsd:complexType name="outputparameters">
				<xsd:annotation>
					<xsd:appinfo source="http://sap.com/xi/TextID">
					81e156707c6511d9b5f700c09f450580
					</xsd:appinfo>
				</xsd:annotation>
				<xsd:sequence>
					<xsd:element name="supname" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo source="http://sap.com/xi/TextID">
							5ae0eb507afb11d9ad1dd875c0a801ad
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:element>
					<xsd:element name="supnum" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo source="http://sap.com/xi/TextID">
							5ae0eb517afb11d9a627d875c0a801ad
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:element>
				</xsd:sequence>
			</xsd:complexType>
		</xsd:schema>
	</wsdl:types>
	<wsdl:message name="messagetype2">
		<wsdl:part name="messagetype2" element="p1:messagetype2" />
	</wsdl:message>
	<wsdl:portType name="messageint2">
		<wsdl:operation name="messageint2">
			<wsdl:output message="p1:messagetype2" />
		</wsdl:operation>
	</wsdl:portType>
	<ifr:properties xmlns:ifr="urn:com-sap:ifr:v2:wsdl">
		<ifr:category>
		ifmmessif
		</ifr:category>
		<ifr:methods>
			<ifr:method name="messageint2">
				<ifr:isSynchron>
				false
				</ifr:isSynchron>
				<ifr:isInbound>
				false
				</ifr:isInbound>
				<ifr:interfaceCategory>
				outbound
				</ifr:interfaceCategory>
			</ifr:method>
		</ifr:methods>
		<ifr:messages>
			<ifr:message name="messagetype2">
				<ifr:messType>
				ifmmessage
				</ifr:messType>
				<ifr:technicalNamespace>
				<a href="http://miraclesoft/scenario2/soap/" TARGET="test_blank">http://miraclesoft/scenario2/soap/</a>
				</ifr:technicalNamespace>
			</ifr:message>
		</ifr:messages>
	</ifr:properties>
</wsdl:definitions>

In your message you have mentioned that the WSDL generated by the IR is wrong. How did you work around it?

You also talk about the SOAP envelope and the action. How do I verify this?

Thanks a ton!

Shailesh

Former Member
0 Kudos

Hi,

where did you take the WSDL from? This one has no bindings etc., e.g. I cannot see the SOAP stuff in it.

I went to the Integration Directory and used there the menu option "Define Web Service". The "propose URL" does not work, e.g. you have to put in the right URL yourself and there you can define the messageint2.

I will be back at work on Monday and I can cut and paste my WSDL so you can see the difference.

Cheers

Stefan

Former Member
0 Kudos

Thanks for your input.

Discovered that theres two ways of getting the WSDL:

1. Go to the message interface and click on the WSDL tab

2. Go to the integration builder (configuration time) -> Tools-> Define web service.

These generate different Java classes after you run the tool (WSDL2Java in my case, since I use AXIS). I mean the WSDL generated by method 1 above just generates one java class, whereas the other WSDL generates a bunch of them (interfaces and classes).

Heres the one i generated using method 2 above. Please let me know if that looks consistent with what you generated:


<?xml version="1.0" encoding="ISO-8859-1"?>

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:p2="http://Supplier_Vendor/scenario" xmlns:p1="urn:xiworkshop:santoro:scenario2" name="SoapSender" targetNamespace="urn:xiworkshop:santoro:scenario2">
    <wsdl:types>
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://Supplier_Vendor/scenario" targetNamespace="http://Supplier_Vendor/scenario">
            <xsd:import namespace="urn:xiworkshop:santoro:scenario2" />
            <xsd:element xmlns:p0="urn:xiworkshop:santoro:scenario2" name="SOAP_messagetype" type="p0:Supplier_SOAP" />
        </xsd:schema>
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:xiworkshop:santoro:scenario2" targetNamespace="urn:xiworkshop:santoro:scenario2">
            <xsd:complexType name="Supplier_SOAP">
                <xsd:annotation>
                    <xsd:appinfo source="http://sap.com/xi/TextID">
                    2449cbc0802d11d9c98000c09f450580
                    </xsd:appinfo>
                </xsd:annotation>
                <xsd:sequence>
                    <xsd:element name="SupplierName" type="xsd:string">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">
                            ecf303607d1311d9823cd610c0a801ad
                            </xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="SupplierNumber" type="xsd:string">
                        <xsd:annotation>
                            <xsd:appinfo source="http://sap.com/xi/TextID">
                            ecf303617d1311d99178d610c0a801ad
                            </xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:schema>
    </wsdl:types>
    <wsdl:message name="SOAP_messagetype">
        <wsdl:part name="SOAP_messagetype" element="p2:SOAP_messagetype" />
    </wsdl:message>
    <wsdl:portType name="SoapSender">
        <wsdl:operation name="SoapSender">
            <wsdl:input message="p1:SOAP_messagetype" />
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="SoapSenderBinding" type="p1:SoapSender">
        <soap:binding xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="document" transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="SoapSender">
            <soap:operation xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="http://sap.com/xi/WebService/soap1.1" />
            <wsdl:input>
                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal" />
            </wsdl:input>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="SoapSenderService">
        <wsdl:port name="SoapSenderPort" binding="p1:SoapSenderBinding">
            <soap:address xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" location="http://msssapxinw:50000/XISOAPAdapter/MessageServlet?channel=:SOAPClient:JJSSoap&version=3.0&Sender.Service=SOAPClient&Interface=urn%3Axiworkshop%3Asantoro%3Ascenario2%5ESoapSender" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

Another potential question is : how do I make use of the Java classes that this WSDL generated for me, in my SOAP client?

I guess you used xml spy, but we are using AXIS.

Thanks for all your help and bearing with me

-Shailesh

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi

I get a Status Error 500 thrown from the XI Server which

when I try to send a soap request. I am running SP9.

<SOAP:Fault><faultcode>SOAP:Server</faultcode><faultstring>System Error</faultstring><detail><s:SystemError xmlns:s="http://sap.com/xi/WebService/xi2.0"><context></context><code>INTERNAL.HTTP_RESP_STATUS_CODE_NOT_OK</code><text>HTTP response contains status code 500 with the description Internal Server Error</text></s:SystemError></detail></SOAP:Fault></SOAP:Body>

Any ideas?

Thanks

Ashish

Former Member
0 Kudos

Ashish,

I am running XI3.0 on SP9.0. Not sure about XI2.0

Also, what adapter engine are you using? Is it external/internal?

Either ways, you need to look at the adapter log. If its the external adapter engine, you should be able monitor the adapter status at port 8200 I think.

If its the internal adapter you can check the status in adapter monitoring in runtime workbench.

Also, whats your SOAP client? If you are using AXIS, theres a neat little SOAP message monitoring tool that comes with it. I think its called Tcpmon.

Hope that gets u started with the debugging

-Shailesh

Former Member
0 Kudos

Hi,

I am running XI3, SP9. Now I am getting no results in the response from my SOAP call. In other words I think it is hitting the RFC in SAP but I get no results. I have a web service client in Stylus who is calling XI which in turn is making a RFC call to SAP R3. Any ideas?

Thanks

Ashish

Former Member
0 Kudos

Hi Asish,

turn a system trace on in the system where the RFC should go in, e.g. ST01 and that should also capture RFC calls or issue a statement into the SM21 log as first statement if you thing it hits the target system. Further did you check the AFW in the runtime workbench to see if any errors come up?

Cheers

Stefan

Former Member
0 Kudos

I'm able to successfully call the XI SOAP Adapter and have it call an RFC. This only works though for RFCs which don't take input parameters, BAPI_COMPANYCODE_GETLIST for example.

Here's my SOAP request that works for BAPI_COMPANYCODE_GETLIST:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="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:Body>

<rfc:BAPI_COMPANYCODE_GETLIST xmlns:rfc="urn:sap-com:document:sap:rfc:functions"/>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

When I try to call RFCs that takes input parameters, BAPI_COMPANYCODE_GETDETAIL for example, it behaves as if I didn't send in the input parameter.

Here's my SOAP request for BAPI_COMPANYCODE_GETDETAIL that doesn't work.

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="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:Body>

<rfc:BAPI_COMPANYCODE_GETDETAIL xmlns:rfc="urn:sap-com:document:sap:rfc:functions">

<rfc:COMPANYCODEID>1000</rfc:COMPANYCODEID>

</rfc:BAPI_COMPANYCODE_GETDETAIL>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

It returns the error "Company code does not exist" even through 1000 is a valid Company code.

I've tried this with multiple RFCs and get the same results. I'm generating the WSDL from "Tools->Define Web Service", using XMLSpy as the SOAP Client, and setting the SOAPaction to "http://sap.com/xi/WebService/soap1.1". We've also tried Stylus as the SOAP Client and get the exact same results.

What am I doing wrong? Could someone post a working RFC SOAP request that includes input parameters?

Former Member
0 Kudos

Hi Jesse,

I using the SOAP Adapter to receive data from a WS and post that via IDOC to R/3 and map the Return IDOCS back to WS which comes in via SOAP.

Did you check the payload in XMB_MONI for the first step? Then do you have a mapping step to map the data from the SOAP to the RFC? It is very picky about spelling and namespaces used. If they don't match no data will get from the SOAP to your target message. This should be visible when you check the payload on the RFC Call. The graphical mapping editor has a test function where you can past the payload from XMB_MONI in as source message including the namespace and execute the test. In 99% of the cases you can compare what SAP wants if you create a empty test instance and switch to the browser view to see what namespace they expect.

I hope this helps to get closer to finding your issue.

Stefan

Former Member
0 Kudos

Thanks Stefan -

We have it working now. Originally we were trying to just use an Outbound Message Interface and send the SOAP request in the RFC format without doing any mapping.

Once we setup an Inbound Message Interface, messages for the WS Request and Response, and maps going both ways, it works.

One side note about XML Spy 2005. I've been a loyal XML Spy user for over 5 years but it's not the best tool for testing SOAP calls. It will work but it can be confusing for a SOAP beginner:

- It doesn't display the complete WSDL file even in text mode. Try to find the soapAction attribute...

- It doesn't set the SOAP Action automatically even though it's in the WSDL. You need to set it manually.

- When you create a SOAP Request from a WSDL it doesn't put the correct contents in the body of the message. This was the most confusing.

Stylus Studio is a much better tool for testing web services. It will do all of the above things correctly and will let you test using 3 different clients (MS SOAP Toolkit 3.0, MS .NET, Apache Axis). I'd recommend it to anyone needing to test SOAP calls to XI.

Former Member
0 Kudos

Hi J Wolff/Stefan

I am designing an interface which invloves SOAP message over the Internet.

The scenario is

Request-

SAP R/3 (Idoc)-->XI (Idoc mapped to xCBL) sends the information via the SOAP Receiver Adapter

through the internet making a synchronous call using BPM --> to SAP BC web service

Response -

SAP BC Sends Application Acknowledgement (AA) --> XI using the same synchronous session, which I am trying to capture in BPM and send to Mail Adapter.

I have got the xCBL sending to the client via the SOAP receiving adapter part working but having hard time getting the AA into XI.

The SAP BC has send the AA but I have not been able to capture in the XI. Do I need to configure the SOAP Sender Adapter and give client the URL,

http://<hostname>:<j2eePortNo>/XISOAPAdapter/MessageServlet?channel=Sales_Progressive:Progressive_In...

where to send the AA.

Any thought or idea is much appreciated

Thank you.

Warm Regards,

Ranjan

Former Member
0 Kudos

> One side note about XML Spy 2005. I've been a loyal

> XML Spy user for over 5 years but it's not the best

> tool for testing SOAP calls. It will work but it can

> be confusing for a SOAP beginner:

>

> - It doesn't display the complete WSDL file even in

> text mode. Try to find the soapAction attribute...

>

> - It doesn't set the SOAP Action automatically even

> though it's in the WSDL. You need to set it

> manually.

>

> - When you create a SOAP Request from a WSDL it

> doesn't put the correct contents in the body of the

> message. This was the most confusing.

In my opinion this is an Integration Builder problem. The generated WSDL contains no SOAP Action. When you use such a WSDL to generate an SOAP request, XMP Spy takes the interface name instead of the message type name. MS Visual Studio .NET has also problem with such a WSDL.

I add always manually the SOAP action. After that XML Spy generates a correct Request Message.

BTW The WSDL which is generated by the Integration Builder always use the "soap" namespace prefix. But this namespace is not defined at the top of the WSDL. MS Visual Studio .NET has also problem with that. So I also add the definition of this namespace. After that MS VS NET is able to generate a valid proxy class.

Sorry for my terrible English.

Former Member
0 Kudos

Jack,

The URL you want is probably in the configuration file of the SOAP adapter.

I'm assuming that your SOAP adapter is up and running.

If not, start the adapter engine by running run_adapter.bat. Go to http://<xiserver>:8200>; and log on with sap/init which is the default user/pass

Now you should be able to check which adapters are up and running.

Indside the config file for the SOAP adapter, you should see a target url. Now, thats not the endpoint that the adapter engine exposes. The endpoint is actually at the port(4444 by default for sender adapter) and the url extensoin(also has a default value) you define in the config file.

You are probably looking for one of these urls.

Let me know if that helped.

-Shailesh

Former Member
0 Kudos

Hi,

the number 2 is the way to go since it has the bindings, forget number 1.

XMLSPY does not generate any JAVA stuff and therefore I dont have to do any programmings at all. You can download XMLSPY for 30 days and test it, just give it the WSDL and create a Soap request. I have not used AXIS as I dont want to code anything to just test my WS.

Cheers

Stefan

Former Member
0 Kudos

Thanks Stefan!

Got it to work using AXIS too.

Heres how:

1. Generate the WDSL using the method #2 above and save it to the file system

2. Run AXIS's wsdl2java tool to generate the service proxy (you need to connect to the service using this proxy). This is available in one of the jars that comes along with AXIS.

3. Use the generated structure of java interfaces and classes inside your client. Heres wht my client looks like after using the autogenerated AXIS code:



 public void doPost(HttpServletRequest request,  HttpServletResponse res)
    throws IOException, ServletException
    {
		
		res.setContentType("text/xml");
		PrintWriter out = res.getWriter();
       
     	String endpoint = "http://msssapxinw:50000/XISOAPAdapter/MessageServlet?channel=:SOAPClient:JJSSoap";

		String supname = request.getParameter("sup-name");
		String supnumber = request.getParameter("sup-number");

		Supplier_SOAP supplier_soap = new Supplier_SOAP();
		supplier_soap.setSupplierName(supname);
		supplier_soap.setSupplierNumber(supnumber);


			try{
			   
				SoapSenderService soapsenderservice = new SoapSenderServiceLocator();
				SoapSender soapsender = soapsenderservice.getSoapSenderPort(new java.net.URL(endpoint));
				soapsender.soapSender(supplier_soap);

						  		
			} catch(Exception serex){ serex.printStackTrace();}
			
        }

The only catch here is that you need to modify the autogenerated code with your XI username and password.

This is in the <servicename>BingStub.java file.

Just overwrite the username and password for the call object using AXIS APIs:

_call.setUsername("username");

_call.setPassword("*******");

Cheers!

Shailesh

Former Member
0 Kudos

Hi Shailesh,

did you have any issue with the WSDL generated out of XI for the wsdl2java tool. Somebody told me that the WSDL from XI generates error:

org.xml.sax.SAXException: Fatal Error: URI=file:///C:/TEMP/dhlwmtcid01.wsdl

Line

=3: The value of the attribute "prefix="xmlns",localpart="ns",rawname

="xmlns:ns"

" is invalid. Prefixed namespace bindings may not be empty.

My outbound interface where I generate my WSDL from is based on an external definition and that uses an XSD but has no namespace. XMLSPY is fine with that but not AXIS.

Did you have the same issue?

Thanks

Stefan

Former Member
0 Kudos

Hi Stefan,

I didnt have any such issues.

Interesting situation though, coz i know that external definitions dont come with namespaces.

Hopefully someone at SAP is reading this

What if you change your XSD to include the namespace?

-Shailesh

Former Member
0 Kudos

Hi Shailesh,

Well the XSD is the MATMAS02 IDOC, e.g. I exported the IDOC to an XSD and imported it as External Definition as your vendor wants the structure. I guess SAP does not export a namespace for their own IDOCS when they create a XSD. I thought about giving it a namespace too. We will see.

Thanks

Stefan