Namespace confusion

We are exposing three Natural subprograms as web services via SOAP/XML. These three services are invoked by SOA which exposes them to the ultimate client in a composite service. The SOA team is telling me that because the three services define the same WSDL namespace, this is causing issues. They told me this before but resolved it by creating an OSB proxy in front of the service to control the namespace and root element from their side.

Now they want me to fix this. However, I cannot find anywhere that I control the WSDL namespace name in Designer. I can see other namespace definitions that affect the xsd and SOAP namespaces, though.

Thinking I would be clever, I extracted the .aar file, and in the META-INF folder I manually changed the WSDL namespace, saved it, and zipped it back into the *.aar file but I can’t seem to fool anyone as Tomcat warns:

  • Unable to generate WSDL 1.1 for this service If you wish Axis2 to automatically generate the WSDL 1.1, then please set useOriginalwsdl as false in your services.xml

The namespace in the WSDL file is:

targetNamespace=“http://namespace.softwareag.com/entirex/xml/mapping

I wanted just to update it to something like:

targetNamespace=“http://namespace.softwareag.com/entirex/xml/mapping/OrderDetails

Thanks in advance!

[color=#444444]I did as the error message suggested and edited services.xml as well to reference the same targetNamespace and to change the parameter:

Web Service Vista_C360_Query_Order_Details [color=red][b]false[/b][/color] true

But now though I get no error when looking at the deployed service, I don’t see the parameter attributes for the request/response payload.

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

I must be doing something wrong in this approach, which doesn’t surprise me, and I am hoping that there is a way to do what I want within Designer itself.

A final update for today… I tried going back to where the XMM was generated and put in the namespace URI as the one I wanted, but it doesn’t change the WSDL targetNamespace - just the xsd:schema targetNamespace, which was never an issue.

Hi Brian
If you select the Mapping Parameters tab in the “XMM editor” and scroll down, you will see ALL namespaces.
Finn

Hi Finn,

I would have thought so, but when I look at that panel in Designer, it appears that the namespaces governing the SOAP message are there but to the exclusion of the overall WSDL targetNamespace.

This one is seen on the first line:

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

The namespaces that are defined in the XMM editor in the Mapping Parameters tab under Namespace Definitions include:

m - urn:com-softwareag-entirex-rpc:%l-%p
SOAP-ENC - http://schemas.xmlsoap.org/soap/encoding/
SOAP-ENV - http://schemas.xmlsoap.org/soap/envelope/
xsd - XML Schema
xsi - http://www.w3.org/2001/XMLSchema-instance

None of these seem to be for the wsdl-level targetNamespace itself.

-Brian

I’m not sure I really understand this yet…

When I generate a wsdl with three subprogs I only get the two …/xml/mapping namespaces in the header for the wsdl

  • not one for each subprog ?!

But could you supply the error that the SOA team gets ?

  • and what tools are they using ?

Finn

Finn,

You are a genius! You gave me the answer I needed (even if you don’t realize it).

I was generating three different services - one for each subprogram. The SOA team (we use the Oracle SOA Suite) is making a composite of two of the three that they publish to their end-client. Your answer made it clear to me that I should generate one WSDL with two operations instead of two different WSDLs. Then there would be just one overall WSDL targetNamespace for this service that the SOA composite service will call.

Thanks for your help!

-Brian