ability to use namespacecontext in HandlerChainsStringQNameAdapter

git-svn-id: https://svn.apache.org/repos/asf/openejb/trunk@1432661 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/openejb/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/HandlerChain$JAXB.java b/openejb/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/HandlerChain$JAXB.java
index a49b952..34fe7fa 100644
--- a/openejb/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/HandlerChain$JAXB.java
+++ b/openejb/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/HandlerChain$JAXB.java
@@ -70,6 +70,9 @@
             context = new RuntimeContext();
         }
 
+        final HandlerChainsStringQNameAdapter handlerChainsStringQNameAdapterAdapter = new HandlerChainsStringQNameAdapter();
+        handlerChainsStringQNameAdapterAdapter.setNamespaceContext(reader.getNamespaceContext());
+
         HandlerChain handlerChain = new HandlerChain();
         context.beforeUnmarshal(handlerChain, LifecycleCallback.NONE);
 
@@ -104,7 +107,7 @@
 
                 QName serviceNamePattern;
                 try {
-                    serviceNamePattern = Adapters.handlerChainsStringQNameAdapterAdapter.unmarshal(serviceNamePatternRaw);
+                    serviceNamePattern = handlerChainsStringQNameAdapterAdapter.unmarshal(serviceNamePatternRaw);
                 } catch (Exception e) {
                     context.xmlAdapterError(elementReader, HandlerChainsStringQNameAdapter.class, QName.class, QName.class, e);
                     continue;
@@ -117,7 +120,7 @@
 
                 QName portNamePattern;
                 try {
-                    portNamePattern = Adapters.handlerChainsStringQNameAdapterAdapter.unmarshal(portNamePatternRaw);
+                    portNamePattern = handlerChainsStringQNameAdapterAdapter.unmarshal(portNamePatternRaw);
                 } catch (Exception e) {
                     context.xmlAdapterError(elementReader, HandlerChainsStringQNameAdapter.class, QName.class, QName.class, e);
                     continue;
@@ -190,6 +193,9 @@
             context = new RuntimeContext();
         }
 
+        final HandlerChainsStringQNameAdapter handlerChainsStringQNameAdapterAdapter = new HandlerChainsStringQNameAdapter();
+        handlerChainsStringQNameAdapterAdapter.setNamespaceContext(writer.getNamespaceContext());
+
         String prefix = writer.getUniquePrefix("http://java.sun.com/xml/ns/javaee");
         if (HandlerChain.class != handlerChain.getClass()) {
             context.unexpectedSubclass(writer, handlerChain, HandlerChain.class);
@@ -215,7 +221,7 @@
         QName serviceNamePatternRaw = handlerChain.serviceNamePattern;
         String serviceNamePattern = null;
         try {
-            serviceNamePattern = Adapters.handlerChainsStringQNameAdapterAdapter.marshal(serviceNamePatternRaw);
+            serviceNamePattern = handlerChainsStringQNameAdapterAdapter.marshal(serviceNamePatternRaw);
         } catch (Exception e) {
             context.xmlAdapterError(handlerChain, "serviceNamePattern", HandlerChainsStringQNameAdapter.class, QName.class, QName.class, e);
         }
@@ -229,7 +235,7 @@
         QName portNamePatternRaw = handlerChain.portNamePattern;
         String portNamePattern = null;
         try {
-            portNamePattern = Adapters.handlerChainsStringQNameAdapterAdapter.marshal(portNamePatternRaw);
+            portNamePattern = handlerChainsStringQNameAdapterAdapter.marshal(portNamePatternRaw);
         } catch (Exception e) {
             context.xmlAdapterError(handlerChain, "portNamePattern", HandlerChainsStringQNameAdapter.class, QName.class, QName.class, e);
         }
diff --git a/openejb/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/HandlerChains$JAXB.java b/openejb/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/HandlerChains$JAXB.java
index 2d33bc7..667e6c2 100644
--- a/openejb/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/HandlerChains$JAXB.java
+++ b/openejb/container/openejb-jee-accessors/src/main/java/org/apache/openejb/jee/HandlerChains$JAXB.java
@@ -38,7 +38,6 @@
 public class HandlerChains$JAXB
         extends JAXBObject<HandlerChains> {
 
-
     public HandlerChains$JAXB() {
         super(HandlerChains.class, new QName("http://java.sun.com/xml/ns/javaee".intern(), "handler-chains".intern()), new QName("http://java.sun.com/xml/ns/javaee".intern(), "handler-chainsType".intern()), HandlerChain$JAXB.class);
     }
@@ -172,5 +171,4 @@
 
         context.afterMarshal(handlerChains, LifecycleCallback.NONE);
     }
-
 }
diff --git a/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/HandlerChainsStringQNameAdapter.java b/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/HandlerChainsStringQNameAdapter.java
index 41e9ff4..30cdf81 100644
--- a/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/HandlerChainsStringQNameAdapter.java
+++ b/openejb/container/openejb-jee/src/main/java/org/apache/openejb/jee/HandlerChainsStringQNameAdapter.java
@@ -17,18 +17,20 @@
 
 package org.apache.openejb.jee;
 
+import org.apache.openejb.jee.JaxbJavaee.HandlerChainsNamespaceFilter;
+
 import javax.xml.XMLConstants;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
+import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
 
-import org.apache.openejb.jee.JaxbJavaee.HandlerChainsNamespaceFilter;
-
 /**
  * @version $Rev$ $Date$
  */
 public class HandlerChainsStringQNameAdapter extends XmlAdapter<String, QName> {
 
     private HandlerChainsNamespaceFilter xmlFilter;
+    private NamespaceContext namespaceContext;
 
     @Override
     public QName unmarshal(String value) throws Exception {
@@ -41,7 +43,14 @@
         }
         String prefix = value.substring(0, colonIndex);
         String localPart = (colonIndex == (value.length() - 1)) ? "" : value.substring(colonIndex + 1);
-        String nameSpaceURI = xmlFilter.lookupNamespaceURI(prefix);
+
+        String nameSpaceURI = "";
+        if (xmlFilter != null) {
+            nameSpaceURI = xmlFilter.lookupNamespaceURI(prefix);
+        } else if (namespaceContext != null) {
+            nameSpaceURI = namespaceContext.getNamespaceURI(prefix);
+        }
+
         if (nameSpaceURI == null) {
             nameSpaceURI = XMLConstants.NULL_NS_URI;
         }
@@ -64,7 +73,11 @@
         return prefix + ":" + localPart;
     }
 
-    public void setHandlerChainsNamespaceFilter(HandlerChainsNamespaceFilter xmlFilter) {
+    public void setHandlerChainsNamespaceFilter(final HandlerChainsNamespaceFilter xmlFilter) {
         this.xmlFilter = xmlFilter;
     }
+
+    public void setNamespaceContext(NamespaceContext namespaceContext) {
+        this.namespaceContext = namespaceContext;
+    }
 }