You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2007/04/06 20:57:40 UTC
svn commit: r526251 - in
/incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools:
./ model/ support/
Author: gnodet
Date: Fri Apr 6 11:57:39 2007
New Revision: 526251
URL: http://svn.apache.org/viewvc?view=rev&rev=526251
Log:
SM-924: Namespace support in servicemix-drools
Added:
incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/support/
incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/support/NamespaceContextImpl.java (with props)
Modified:
incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/DroolsEndpoint.java
incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Exchange.java
incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Fault.java
incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/JbiHelper.java
incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Message.java
Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/DroolsEndpoint.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/DroolsEndpoint.java?view=diff&rev=526251&r1=526250&r2=526251
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/DroolsEndpoint.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/DroolsEndpoint.java Fri Apr 6 11:57:39 2007
@@ -25,6 +25,7 @@
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.servicedesc.ServiceEndpoint;
+import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
import org.apache.servicemix.common.DefaultComponent;
@@ -46,7 +47,8 @@
private RuleBase ruleBase;
private Resource ruleBaseResource;
private URL ruleBaseURL;
-
+ private NamespaceContext namespaceContext;
+
public DroolsEndpoint() {
super();
}
@@ -100,7 +102,21 @@
public void setRuleBaseURL(URL ruleBaseURL) {
this.ruleBaseURL = ruleBaseURL;
}
-
+
+ /**
+ * @return the namespaceContext
+ */
+ public NamespaceContext getNamespaceContext() {
+ return namespaceContext;
+ }
+
+ /**
+ * @param namespaceContext the namespaceContext to set
+ */
+ public void setNamespaceContext(NamespaceContext namespaceContext) {
+ this.namespaceContext = namespaceContext;
+ }
+
public void validate() throws DeploymentException {
super.validate();
if (ruleBase == null && ruleBaseResource == null && ruleBaseURL == null) {
Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Exchange.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Exchange.java?view=diff&rev=526251&r1=526250&r2=526251
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Exchange.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Exchange.java Fri Apr 6 11:57:39 2007
@@ -23,6 +23,7 @@
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.NormalizedMessage;
import javax.jbi.messaging.RobustInOnly;
+import javax.xml.namespace.NamespaceContext;
public class Exchange {
@@ -39,9 +40,11 @@
private Message in;
private Message out;
private Message fault;
+ private NamespaceContext namespaceContext;
- public Exchange(MessageExchange exchange) {
+ public Exchange(MessageExchange exchange, NamespaceContext namespaceContext) {
this.exchange = exchange;
+ this.namespaceContext = namespaceContext;
update();
}
@@ -101,22 +104,23 @@
protected Message getMessage(String name) {
NormalizedMessage msg = exchange.getMessage(name);
- return msg != null ? new Message(msg) : null;
+ return msg != null ? new Message(msg, this.namespaceContext) : null;
}
protected void update() {
if (in == null) {
NormalizedMessage msg = exchange.getMessage("in");
- in = msg != null ? new Message(msg) : null;
+ in = msg != null ? new Message(msg, this.namespaceContext) : null;
}
if (out == null) {
NormalizedMessage msg = exchange.getMessage("out");
- out = msg != null ? new Message(msg) : null;
+ out = msg != null ? new Message(msg, this.namespaceContext) : null;
}
if (fault == null) {
javax.jbi.messaging.Fault msg = exchange.getFault();
- fault = msg != null ? new Fault(msg) : null;
+ fault = msg != null ? new Fault(msg,this.namespaceContext) : null;
}
}
}
+
Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Fault.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Fault.java?view=diff&rev=526251&r1=526250&r2=526251
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Fault.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Fault.java Fri Apr 6 11:57:39 2007
@@ -16,10 +16,12 @@
*/
package org.apache.servicemix.drools.model;
+import javax.xml.namespace.NamespaceContext;
+
public class Fault extends Message {
- public Fault(javax.jbi.messaging.Fault message) {
- super(message);
+ public Fault(javax.jbi.messaging.Fault message, NamespaceContext namespaceContext) {
+ super(message, namespaceContext);
}
}
Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/JbiHelper.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/JbiHelper.java?view=diff&rev=526251&r1=526250&r2=526251
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/JbiHelper.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/JbiHelper.java Fri Apr 6 11:57:39 2007
@@ -52,7 +52,7 @@
MessageExchange exchange,
WorkingMemory memory) {
this.endpoint = endpoint;
- this.exchange = new Exchange(exchange);
+ this.exchange = new Exchange(exchange, endpoint.getNamespaceContext());
this.memory = memory;
this.exchangeFactHandle = this.memory.assertObject(this.exchange);
}
Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Message.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Message.java?view=diff&rev=526251&r1=526250&r2=526251
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Message.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/model/Message.java Fri Apr 6 11:57:39 2007
@@ -17,10 +17,12 @@
package org.apache.servicemix.drools.model;
import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.namespace.NamespaceContext;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import org.apache.servicemix.expression.JAXPBooleanXPathExpression;
+import org.apache.servicemix.expression.JAXPStringXPathExpression;
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import org.w3c.dom.Element;
@@ -29,10 +31,12 @@
private final static SourceTransformer TRANFORMER = new SourceTransformer();
private final NormalizedMessage message;
+ private final NamespaceContext namespaceContext;
- public Message(NormalizedMessage message) {
+ public Message(NormalizedMessage message, NamespaceContext namespaceContext) {
this.message = message;
// Make sure message is re-readable
+ this.namespaceContext = namespaceContext;
Source content = message.getContent();
if (content != null) {
try {
@@ -51,9 +55,22 @@
public boolean xpath(String xpath) throws Exception {
JAXPBooleanXPathExpression expression = new JAXPBooleanXPathExpression(xpath);
+ if (this.namespaceContext != null) {
+ expression.setNamespaceContext(this.namespaceContext);
+ }
Boolean b = (Boolean) expression.evaluate(null, message);
return b.booleanValue();
}
+
+ public String valueOf(String xpath) throws Exception {
+ JAXPStringXPathExpression expression = new JAXPStringXPathExpression(xpath);
+ if (this.namespaceContext != null) {
+ expression.setNamespaceContext(this.namespaceContext);
+ }
+ String res = (String)expression.evaluate(null, message);
+ return res;
+ }
+
public Object getProperty(String name) {
return message.getProperty(name);
Added: incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/support/NamespaceContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/support/NamespaceContextImpl.java?view=auto&rev=526251
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/support/NamespaceContextImpl.java (added)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/support/NamespaceContextImpl.java Fri Apr 6 11:57:39 2007
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.drools.support;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.XMLConstants;
+import javax.xml.namespace.NamespaceContext;
+
+/**
+ * A simple namespace context with a clean xbean configuration.
+ *
+ * @org.apache.xbean.XBean element="namespace-context"
+ * description="A NamespaceContext implementation"
+ * @author gnodet
+ * @version $Revision$
+ */
+public class NamespaceContextImpl implements NamespaceContext {
+
+ /**
+ * map containing bound namespaces, keyed by their prefix. A LinkedHashMap
+ * is used to ensure that {@link #getPrefix(String)} always returns the same
+ * prefix, unless that prefix is removed.
+ */
+ private Map namespaces = new LinkedHashMap();
+
+ /**
+ * Constructs a SimpleNamespaceContext with no parent context or namespace
+ * declarations.
+ */
+ public NamespaceContextImpl() {
+ }
+
+ /**
+ * Constructs a SimpleNamespaceContext with no parent context that contains
+ * the specified prefixes.
+ *
+ * @param namespaces A Map of namespace URIs, keyed by their prefixes.
+ */
+ public NamespaceContextImpl(Map namespaces) {
+ setNamespaces(namespaces);
+ }
+
+ /**
+ * @org.apache.xbean.Map entryName="namespace" keyName="prefix"
+ * @return Returns the namespaces.
+ */
+ public Map getNamespaces() {
+ return namespaces;
+ }
+
+ /**
+ * @param namespaces The namespaces to set.
+ */
+ public void setNamespaces(Map namespaces) {
+ this.namespaces.clear();
+ if (namespaces != null) {
+ this.namespaces.putAll(namespaces);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.namespace.NamespaceContext#getNamespaceURI(java.lang.String)
+ */
+ public String getNamespaceURI(String prefix) {
+ if (prefix == null) {
+ throw new IllegalArgumentException("prefix argument was null");
+ } else if (prefix.equals(XMLConstants.XML_NS_PREFIX)) {
+ return XMLConstants.XML_NS_URI;
+ } else if (prefix.equals(XMLConstants.XMLNS_ATTRIBUTE)) {
+ return XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
+ } else if (namespaces.containsKey(prefix)) {
+ String uri = (String) namespaces.get(prefix);
+ if (uri.length() == 0) {
+ return null;
+ } else {
+ return uri;
+ }
+ } else {
+ return null;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.namespace.NamespaceContext#getPrefix(java.lang.String)
+ */
+ public String getPrefix(String nsURI) {
+ if (nsURI == null) {
+ throw new IllegalArgumentException("nsURI was null");
+ } else if (nsURI.length() == 0) {
+ throw new IllegalArgumentException("nsURI was empty");
+ } else if (nsURI.equals(XMLConstants.XML_NS_URI)) {
+ return XMLConstants.XML_NS_PREFIX;
+ } else if (nsURI.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) {
+ return XMLConstants.XMLNS_ATTRIBUTE;
+ }
+ Iterator iter = namespaces.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ String uri = (String) entry.getValue();
+ if (uri.equals(nsURI)) {
+ return (String) entry.getKey();
+ }
+ }
+ if (nsURI.length() == 0) {
+ return "";
+ } else {
+ return null;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see javax.xml.namespace.NamespaceContext#getPrefixes(java.lang.String)
+ */
+ public Iterator getPrefixes(String nsURI) {
+ if (nsURI == null) {
+ throw new IllegalArgumentException("nsURI was null");
+ } else if (nsURI.length() == 0) {
+ throw new IllegalArgumentException("nsURI was empty");
+ } else if (nsURI.equals(XMLConstants.XML_NS_URI)) {
+ return Collections.singleton(XMLConstants.XML_NS_PREFIX).iterator();
+ } else if (nsURI.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) {
+ return Collections.singleton(XMLConstants.XMLNS_ATTRIBUTE).iterator();
+ }
+ Set prefixes = null;
+ Iterator iter = namespaces.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ String uri = (String) entry.getValue();
+ if (uri.equals(nsURI)) {
+ if (prefixes == null) {
+ prefixes = new HashSet();
+ }
+ prefixes.add(entry.getKey());
+ }
+ }
+ if (prefixes != null) {
+ return Collections.unmodifiableSet(prefixes).iterator();
+ } else if (nsURI.length() == 0) {
+ return Collections.singleton("").iterator();
+ } else {
+ return Collections.EMPTY_LIST.iterator();
+ }
+ }
+
+}
+
Propchange: incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/support/NamespaceContextImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/support/NamespaceContextImpl.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: incubator/servicemix/trunk/deployables/serviceengines/servicemix-drools/src/main/java/org/apache/servicemix/drools/support/NamespaceContextImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain