[
https://issues.apache.org/jira/browse/AXIS2-2756?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12504364
]
Eran Chinthaka commented on AXIS2-2756:
---------------------------------------
Ok this is a summarization of the discussion we had during the hackathon.
This is the problem we understood.
We are trying to merge two or more wsdls, when WSDLs are having imports. If
these wsdls have conflicting namespace declarations, say for instance two
different tns or targetnamespaces, then when we merge these two, we do not
resolve or treat these conflicting namespace. This ends up with a wrong wsdl4j
object model. The same model is used to generate Axis description hierarchy.
When there is a ?wsdl request, irrespective of whether useOriginalWSDL flag is
set or not, what you will see on the browser might be wrong or ?wsdl generation
might fail.
Solution
-----------
There are two solutions for this. One I'd say a quick and dirty solution and
the second one is the correct solution.
Solution 1 : When we code gen, we save wsdls files inside the resources folder
of the service archive. So we should show/use them rather than serializing the
wrong wsdl4jdefinition or Axis2 description hierarchy. For this to be done
following things needs to be done.
During code generation time, put useOriginalWSDL flag in to the services.xml.
Then when we are serving ?wsdl request, if there are multiple wsdls, then we
should show the wsdls inside the resources folder rather than serializing any
of the object models. in this case, we can not simply show whatever in these
resources. We need to modify endpoints url as usual and put proper links to the
imports so that if some one clicks on that, it should show the other wsdls as
well.
Solution 2 : We always serialize using WSDL4J model. But when we merge two
wsdls we have to maintain a map which maps the component names to namespace
name. When there is a ?wsdl request we should traverse the object model and
should show components from one namespace and put import links for other
components. These links should contains the namespace as well. So when clicked
this will goto the namespace map and show proper components only.
> problem to display the WSDL in a browser in Axis2.1.2
> -----------------------------------------------------
>
> Key: AXIS2-2756
> URL: https://issues.apache.org/jira/browse/AXIS2-2756
> Project: Axis 2.0 (Axis2)
> Issue Type: Bug
> Components: deployment
> Affects Versions: 1.2
> Reporter: Stephane Roy
> Assignee: Davanum Srinivas
> Priority: Blocker
> Attachments: stockquote.wsdl, stockquoteservice.wsdl,
> stockquoteservice2.wsdl
>
>
> I noticed a problem with the latest release of Axis2 (2.1.2).
> Once the code is generated, compiled and deployed for the server part, I try
> to display the related WSDL in my browser, by clicking on the line of my
> service in the http://localhost:8080/axis2/services/listServices page.
> The page http://localhost:8080/axis2/services/<myService>?wsdl opens with an
> error:
> org.apache.axis2.AxisFault: WSDLException: faultCode=OTHER_ERROR: Can't find
> prefix for 'http://www.xxx.com/yyy/myService'. Namespace prefixes must be set
> on the Definition object using the addNamespace(...) method.
> org.apache.axis2.description.AxisService.printWSDL(AxisService.java:850)
>
> org.apache.axis2.transport.http.ListingAgent.processListService(ListingAgent.java:221)
> org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:225)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
> In Axis2.1.1.1, with the same WSDL, it worked fine.
> In Axis2.1.2, I tried to generate the code in adb mode, then in xmlbeans mode
> but I have the same problem.
> After analysis, I found a scenario to reproduce the problem.
> Our web service is defined with a WSDL divided in three parts. First we have
> a concrete WSDL (defining the Service and the Binding). This WSDL imports an
> abstract WSDL (defining the PortType and the Messages). Finally the abstract
> WSDL imports a XSD Schema (defining the Types).
> I found out that the WSDL cannot be displayed in my browser because there is
> a conflict between two prefixes:
> In the concrete WSDL, we defined the prefix 'tns' for our namespace. The
> prefix 'tns' is also used in the abstract WSDL for another namespace.
> With Axis2.1.2, this situation prevents the WSDL to be displayed in the
> browser, whereas with Axis2.1.1.1, everything works fine.
> I change one of the occurrences of the prefix 'tns' to 'tns2' and then
> Axis2.1.2 can display the WSDL in the browser, just fine.
> It seems that this is a regression of Axis2.1.2.
> Thanks in advance.
> PS: This problem has been submitted to the User mailing list:
> http://marc.info/?l=axis-user&m=117915706112761&w=2
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]