axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jongjin Choi" <gunsn...@hotmail.com>
Subject JavaServiceImplWriter problem (port QName)
Date Mon, 05 Jul 2004 15:13:08 GMT
Hi.
 
Currently the code generated by the JavaServiceImplWriter seems not to
keep the qname of port in the WSDL.
 
Using Java2Wsdl with this wsdl
http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl which has
the wsdl:service like this:
 
 
<service name='net.xmethods.services.stockquote.StockQuoteService'>
  <documentation>net.xmethods.services.stockquote.StockQuote web
service</documentation>
  <port name='net.xmethods.services.stockquote.StockQuotePort' 
       binding='tns:net.xmethods.services.stockquote.StockQuoteBinding'>
     <soap:address location='http://64.124.140.30:9090/soap'/>
   </port>
</service>
 
 
the generated Service Locator code is:
 
 
    // The WSDD service name defaults to the port name.
    private java.lang.String
NetXmethodsServicesStockquoteStockQuotePortWSDDServiceName = 
                "NetXmethodsServicesStockquoteStockQuotePort";  <--- (1)

    public stock.NetXmethodsServicesStockquoteStockQuotePortType
getNetXmethodsServicesStockquoteStockQuotePort(java.net.URL portAddress)
throws javax.xml.rpc.ServiceException {
        try {
            stock.NetXmethodsServicesStockquoteStockQuoteBindingStub _stub =
new stock.NetXmethodsServicesStockquoteStockQuoteBindingStub(portAddress,
this);
 
_stub.setPortName(getNetXmethodsServicesStockquoteStockQuotePortWSDDServiceN
ame());   <--- (3)
            return _stub;
        }
        catch (org.apache.axis.AxisFault e) {
            return null;
        }
    }
 
public java.util.Iterator getPorts() {
        if (ports == null) {
            ports = new java.util.HashSet();
            ports.add(new
javax.xml.namespace.QName("NetXmethodsServicesStockquoteStockQuotePort"));
<-- (2) 
        }
        return ports.iterator();
    }
 
 
 
 
The javified port QName is used in (1), (2) and the port name for _stub is
set using this javified name in (3).
 
So we can not set up client JAX-RPC handler code using the name in the WSDL.

When settng up client JAX-RPC handler, the developer should know the
javified name by inspecting the generated Locator code like this:
 
 
HandlerRegistry reg = service.getHandlerRegistry();
QName portName 
       = new
QName("http://www.themindelectric.com/wsdl/net.xmethods.services.stockquote.
StockQuote/", 
           "NetXmethodsServicesStockquoteStockQuotePort");   // <-- Javified
Name
 
List list = new ArrayList();
list.add(new HandlerInfo(ClientHandler.class, null, null));
reg.setHandlerChain(portName, list);
 
 
 
I think that the developer can use the wsdl port name directly instead of
inspecting the Axis-generated code like this:
 
 
 
HandlerRegistry reg = service.getHandlerRegistry();
  QName portName = new
QName("http://www.themindelectric.com/wsdl/net.xmethods.services.stockquote.
StockQuote/", 
     "net.xmethods.services.stockquote.StockQuotePort");   // <-- xml name
in WSDL
 
 
 
I made a some modification in the JavaServiceImplWriter and it worked. 
I'd like the axis committer to check and apply this fix.
The diff with the currently Axis cvs code is following:
 
--------------------------------------------------------------------
 
cvs -q diff JavaServiceImplWriter.java (in directory
D:\src\ws-axis\java\src\org\apache\axis\wsdl\toJava\)
Index: JavaServiceImplWriter.java
===================================================================
RCS file:
/home/cvspublic/ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaServiceImpl
Writer.java,v
retrieving revision 1.37
diff -r1.37 JavaServiceImplWriter.java
100a101
>         Vector getPortPortXmlNames = new Vector();
153a155
>             String portXmlName = p.getName();
174a177
>             getPortPortXmlNames.add(portXmlName);
241c244
<             writeWSDDServiceNameInfo(pw, wsddServiceName, portName);
---
>             writeWSDDServiceNameInfo(pw, wsddServiceName, portName,
portXmlName);
250c253
<         writeGetPortQNameClass(pw, getPortPortNames);
---
>         writeGetPortQNameClass(pw, getPortPortNames, getPortPortXmlNames);
252c255
<         writeGetPorts(pw, getPortPortNames);
---
>         writeGetPorts(pw, sEntry.getQName().getNamespaceURI(),
getPortPortXmlNames);
292c295
<                                             String portName) {
---
>                                             String portName, String
portXmlName) {
297c300
<                 + portName + "\";");
---
>                 + portXmlName + "\";");        
464c467,468
<                                           Vector getPortPortNames) {
---
>                                           Vector getPortPortNames,
>             Vector getPortPortXmlNames) {
481a486
>             String portXmlName = (String) getPortPortXmlNames.get(i);
483c488
<             pw.println("if (\"" + portName + "\".equals(inputPortName))
{");
---
>             pw.println("if (\"" + portXmlName + "\".equals(inputPortName))
{");
520c525
<     protected void writeGetPorts(PrintWriter pw, Vector portNames) {
---
>     protected void writeGetPorts(PrintWriter pw, String namespaceURI,
Vector portNames) {
529,530c534,535
<             pw.println("            ports.add(new
javax.xml.namespace.QName(\""
<                     + portNames.get(i) + "\"));");
---
>             pw.println("            ports.add(new
javax.xml.namespace.QName(\"" + 
>                     namespaceURI + "\", \"" + portNames.get(i) + "\"));");
 
***** CVS exited normally with code 1 *****
 
 
 
 
 
 
 
 

 
 
 

Mime
View raw message