You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by du...@apache.org on 2007/04/17 13:05:57 UTC

svn commit: r529562 - in /webservices/axis/trunk/proposals/dug/java/src/org/apache/axis/wsa: EndpointReference.java MIHeader.java

Author: dug
Date: Tue Apr 17 04:05:56 2007
New Revision: 529562

URL: http://svn.apache.org/viewvc?view=rev&rev=529562
Log:
Do a better job of picking up the extensibility points in an EPR
Add a util method to query the current WSA version

Modified:
    webservices/axis/trunk/proposals/dug/java/src/org/apache/axis/wsa/EndpointReference.java
    webservices/axis/trunk/proposals/dug/java/src/org/apache/axis/wsa/MIHeader.java

Modified: webservices/axis/trunk/proposals/dug/java/src/org/apache/axis/wsa/EndpointReference.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/proposals/dug/java/src/org/apache/axis/wsa/EndpointReference.java?view=diff&rev=529562&r1=529561&r2=529562
==============================================================================
--- webservices/axis/trunk/proposals/dug/java/src/org/apache/axis/wsa/EndpointReference.java (original)
+++ webservices/axis/trunk/proposals/dug/java/src/org/apache/axis/wsa/EndpointReference.java Tue Apr 17 04:05:56 2007
@@ -5,6 +5,7 @@
 import java.util.List;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.Vector;
 import org.w3c.dom.Document;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.DocumentBuilder;
@@ -30,6 +31,8 @@
   protected String  portName = null;
   protected List    referenceProperties = new java.util.LinkedList();
   protected List    referenceParameters = new java.util.LinkedList();
+  protected Vector  metadata = null ;
+  protected Vector  extras = null ;
 
   EndpointReference( final EndpointReference epr){
     this.address = epr.address;
@@ -38,6 +41,13 @@
     this.portName = epr.portName;
     this.referenceProperties = new java.util.LinkedList(epr.referenceProperties);
     this.referenceParameters = new java.util.LinkedList(epr.referenceParameters);
+    this.metadata = new Vector();
+    for ( int i = 0 ; epr.extras != null && i < epr.metadata.size() ; i++ ) 
+      metadata.add(  ((Element)epr.metadata.get(i)).cloneNode( true ) );
+
+    this.extras = new Vector();
+    for ( int i = 0 ; epr.extras != null && i < epr.extras.size() ; i++ ) 
+      extras.add(  ((Element)epr.extras.get(i)).cloneNode( true ) );
   }
 
   protected EndpointReference() {}
@@ -76,6 +86,20 @@
         newObj.addReferenceParameter( new String(prop) );
       }
     }
+    if ( this.metadata != null ) {
+      for ( int i = 0 ; i < this.metadata.size() ; i++ ) {
+        Element e = (Element) this.metadata.get(i);
+        e = (Element) e.cloneNode( true );
+        newObj.addExtraElement( e );
+      }
+    }
+    if ( this.extras != null ) {
+      for ( int i = 0 ; i < this.extras.size() ; i++ )  {
+        Element e = (Element) this.extras.get(i);
+        e = (Element) e.cloneNode( true );
+        newObj.addExtraElement( e );
+      }
+    }
     return newObj ;
   }
 
@@ -147,35 +171,61 @@
    */
   public static EndpointReference fromDOM(Element el) throws Exception {
      EndpointReference er = new AxisEndpointReference();
+     String NS1 = WSAConstants.NS_WSA1 ;
+     String NS2 = WSAConstants.NS_WSA2 ;
+
      String NSs[] = new String[] { WSAConstants.NS_WSA1, WSAConstants.NS_WSA2 };
 
-     for ( int j = 0 ; j < NSs.length ; j++ ) {
-       String ns = NSs[j] ;
+     NodeList list = el.getChildNodes();
+     for ( int j = 0 ; list != null && j < list.getLength() ; j++ ) {
+       Node node = list.item( j );
+       if ( node.getNodeType() != Node.ELEMENT_NODE ) continue ;
+       Element e = (Element) node ;
+       String  ns = e.getNamespaceURI();
+       String  ln = e.getLocalName();
 
-       NodeList nl = el.getElementsByTagNameNS(ns, "Address");
-       if ( nl.item(0)!=null ) {
-         er.setAddress(Util.getText((Element)nl.item(0)));
+       if ( "Address".equals(ln) && (NS1.equals(ns) || NS2.equals(ns)) ) {
+         er.setAddress( Util.getText( e ) );
          er.setWSAVersion( ns );
        }
-
-       nl = el.getElementsByTagNameNS(ns, "PortType");
-       if (nl.item(0)!=null)
-         er.setPortType(Util.getText((Element)nl.item(0)));
-
-       nl = el.getElementsByTagNameNS(ns, "ServiceName");
-       if (nl.item(0)!=null) {
-         Element child = (Element)nl.item(0);
-         er.setServiceName(Util.getText(child));
-         er.setPortName(child.getAttributeNS(ns, "PortName"));
+       else if ( "PortType".equals(ln) && (NS1.equals(ns) || NS2.equals(ns)) ) {
+         er.setPortType( Util.getText( e ) );
+       }
+       else if ("ServiceName".equals(ln) && (NS1.equals(ns) || NS2.equals(ns))){
+         er.setServiceName( Util.getText( e ) );
+         er.setPortName(e.getAttributeNS(ns, "PortName"));
+       }
+       else if ( "ReferenceProperties".equals(ln) &&
+                 (NS1.equals(ns) || NS2.equals(ns)) ) {
+         NodeList l1 = e.getChildNodes();
+         for ( int k = 0 ; k < l1.getLength() ; k++ ) {
+           Node n1 = l1.item( k );
+           if ( n1.getNodeType() != Node.ELEMENT_NODE ) continue ;
+           er.addReferenceProperty( (Element) n1 );
+         }
+       }
+       else if ( "ReferenceParameters".equals(ln) &&
+                 (NS1.equals(ns) || NS2.equals(ns)) ) {
+         NodeList l1 = e.getChildNodes();
+         for ( int k = 0 ; k < l1.getLength() ; k++ ) {
+           Node n1 = l1.item( k );
+           if ( n1.getNodeType() != Node.ELEMENT_NODE ) continue ;
+           er.addReferenceParameter( (Element) n1 );
+         }
+       }
+       else if ( "Metadata".equals(ln) && NS2.equals(ns) ) {
+         NodeList l = e.getChildNodes();
+         for ( int i = 0 ; i < l.getLength() ; i++ ) {
+           Node n = l.item( i );
+           if ( n.getNodeType() != Node.ELEMENT_NODE ) continue ;
+           if ( er.metadata == null ) er.metadata = new Vector();
+           er.metadata.add( n.cloneNode(true) );
+         }
+       }
+       else {
+         if ( er.extras == null ) er.extras = new Vector();
+         er.extras.add( e.cloneNode(true) );
        }
-
-       nl = el.getElementsByTagNameNS(ns, "ReferenceProperties");
-       if (nl.item(0)!=null) 
-         er.addReferenceProperties( (Element) nl.item(0) );
-
-       nl = el.getElementsByTagNameNS(ns, "ReferenceParameters");
-       if (nl.item(0)!=null) 
-         er.addReferenceParameters( (Element) nl.item(0) );
      }
      if ( er.getAddress() == null ) {
        String tmp = "Missing Address in EPR: " + XMLUtils.ElementToString(el);
@@ -184,6 +234,16 @@
      return er ;
   }
 
+  public void addExtraElement(Element e) {
+    if ( this.extras == null ) this.extras = new Vector();
+    this.extras.add( e.cloneNode(true) );
+  }
+
+  public void addMetadataElement(Element e) {
+    if ( this.metadata == null ) this.metadata = new Vector();
+    this.metadata.add( e.cloneNode(true) );
+  }
+
   /**
    * Passing in a wsa:ReferenceParameter element this will add all children
    * add references parameters to the EPR
@@ -280,6 +340,14 @@
      portType = pt;
   }
 
+  public Vector getExtra() {
+    return extras ;
+  }
+
+  public Vector getMetadata() {
+    return metadata ;
+  }
+
   public Element toDOM() throws javax.xml.parsers.ParserConfigurationException {
      return toDOM(null, null);
   }
@@ -365,6 +433,31 @@
       }
       rootChild.appendChild(refProp);
     }  
+
+    if (metadata != null) {
+      Element md = null ;
+
+      if (namespace.equals(WSAConstants.NS_WSA2)) {
+        md = ehrDoc.createElementNS(namespace, "Metadata");
+        md.setPrefix("wsa");
+        rootChild.appendChild( md );
+      }
+      else
+        md = rootChild ;
+
+      for ( int i = 0 ; i < metadata.size() ; i++ ) {
+        Element e = (Element) metadata.get(i);
+        md.appendChild( ehrDoc.importNode( e, true ) );
+      }
+    }
+
+    if ( extras != null ) {
+      for ( int i = 0 ; i < extras.size() ; i++ ) {
+        Element e = (Element) extras.get(i);
+        rootChild.appendChild( ehrDoc.importNode( e, true ) );
+      }
+    }
+
     return rootChild;
   }
 

Modified: webservices/axis/trunk/proposals/dug/java/src/org/apache/axis/wsa/MIHeader.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/proposals/dug/java/src/org/apache/axis/wsa/MIHeader.java?view=diff&rev=529562&r1=529561&r2=529562
==============================================================================
--- webservices/axis/trunk/proposals/dug/java/src/org/apache/axis/wsa/MIHeader.java (original)
+++ webservices/axis/trunk/proposals/dug/java/src/org/apache/axis/wsa/MIHeader.java Tue Apr 17 04:05:56 2007
@@ -90,7 +90,7 @@
    * 
    * @exception AxisFault
    */
-  public MIHeader(javax.xml.rpc.Call call) throws AxisFault {
+  public MIHeader(javax.xml.rpc.Call call) {
     processedOnGet = true ;
     removeOnGet = false ;
     call.setProperty( WSAConstants.REQ_MIH, this );
@@ -111,6 +111,18 @@
 
   public String getWSAVersion() {
     return namespace ;
+  }
+
+  public static String getCurrentWSAVersion() throws Exception {
+    MIHeader mih = null ;
+    MessageContext msgContext = MessageContext.getCurrentContext();
+    if ( msgContext == null ) return EndpointReference.getGlobalWSAVersion() ;
+    if ( msgContext.getPastPivot() ) 
+       mih = fromResponse();
+    else
+       mih = fromRequest();
+    if ( mih == null ) return EndpointReference.getGlobalWSAVersion() ;
+    return mih.getWSAVersion();
   }
 
   public static MIHeader fromCurrentMessage() throws Exception {



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org