Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@

public interface XMLElement {

public abstract XMLElement parse(XMLStreamReader token) throws Exception;
XMLElement parse(XMLStreamReader token) throws Exception;

public abstract void write(XMLStreamWriter out) throws XMLStreamException;
void write(XMLStreamWriter out) throws XMLStreamException;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
/* Copyright 2025 predic8 GmbH, www.predic8.com

Licensed 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 com.predic8.membrane.core.config.xml;

import com.predic8.membrane.annot.*;

import javax.xml.namespace.*;
import java.util.*;

import static javax.xml.XMLConstants.NULL_NS_URI;

@MCElement(name="namespaces", topLevel = false)
public class Namespaces {

private List<Namespace> namespaces;
Comment thread
predic8 marked this conversation as resolved.
private final NamespaceContextImpl nsContext = new NamespaceContextImpl();

public NamespaceContext getNamespaceContext() {
return nsContext;
}

/**
* @description Defines XML namespace mappings (prefix to URI) for use in XPath expressions.
*/
Comment thread
predic8 marked this conversation as resolved.
@MCChildElement(allowForeign = false)
public void setNamespace(List<Namespace> namespace) {
this.namespaces = namespace;
}

public List<Namespace> getNamespace() {
return namespaces;
}

@MCElement(name = "namespace", topLevel = false, id = "xml-namespace")
public static class Namespace {

public String prefix;
public String uri;

public Namespace() {
}

public String getPrefix() {
return prefix;
}

@MCAttribute
public void setPrefix(String prefix) {
this.prefix = prefix;
}

public String getUri() {
return uri;
}

@MCAttribute
public void setUri(String uri) {
this.uri = uri;
}
}

class NamespaceContextImpl implements NamespaceContext {

@Override
public String getNamespaceURI(String prefix) {
return namespaces.stream()
.filter(ns -> prefix.equals(ns.prefix))
.findFirst()
.map(ns -> ns.uri)
.orElse(NULL_NS_URI);
}

@Override
public String getPrefix(String namespaceURI) {
return namespaces.stream()
.filter(ns -> namespaceURI.equals(ns.uri))
.map(ns -> ns.prefix)
.findFirst()
.orElse(null);
}

@Override
public Iterator<String> getPrefixes(String namespaceURI) {
return namespaces.stream()
.filter(ns -> namespaceURI.equals(ns.uri))
.map(ns -> ns.prefix)
.iterator();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.predic8.membrane.core.config.xml;

import com.predic8.membrane.annot.*;

@MCElement(name="xmlConfig",topLevel = true)
public class XmlConfig {

private Namespaces namespaces;

@MCChildElement
public void setNamespaces(Namespaces namespaces) {
this.namespaces = namespaces;
}

public Namespaces getNamespaces() {
return namespaces;
}
}
Comment thread
predic8 marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,12 @@ public Builder json(String body) {
return this;
}

public Builder xml(String body) {
req.setBodyContent(body.getBytes(UTF_8));
req.header.setContentType(APPLICATION_XML);
return this;
}

public Builder post(URIFactory uriFactory, String url) throws URISyntaxException {
return method(Request.METHOD_POST).url(uriFactory, url);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/* Copyright 2025 predic8 GmbH, www.predic8.com

Licensed 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 com.predic8.membrane.core.interceptor;

import com.predic8.membrane.core.config.xml.*;

public interface XMLSupport {

void setXmlConfig(XmlConfig xmlConfig);

XmlConfig getXmlConfig();
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,14 @@
limitations under the License. */
package com.predic8.membrane.core.interceptor.apikey.extractors;

import com.predic8.membrane.annot.MCAttribute;
import com.predic8.membrane.annot.MCElement;
import com.predic8.membrane.annot.*;
import com.predic8.membrane.core.Router;
import com.predic8.membrane.core.config.xml.*;
import com.predic8.membrane.core.exchange.Exchange;
import com.predic8.membrane.core.interceptor.lang.Polyglot;
import com.predic8.membrane.core.lang.ExchangeExpression;
import com.predic8.membrane.core.lang.ExchangeExpression.Language;
import com.predic8.membrane.core.interceptor.*;
import com.predic8.membrane.core.interceptor.lang.*;
import com.predic8.membrane.core.lang.*;
import com.predic8.membrane.core.lang.ExchangeExpression.*;

import java.util.Optional;

Expand Down Expand Up @@ -47,15 +48,16 @@
* @topic 3. Security and Validation
*/
@MCElement(name="expressionExtractor", topLevel = false)
public class ApiKeyExpressionExtractor implements ApiKeyExtractor, Polyglot {
public class ApiKeyExpressionExtractor implements ApiKeyExtractor, Polyglot, XMLSupport {

private String expression = "";
private Language language = SPEL;
private ExchangeExpression exchangeExpression;
private XmlConfig xmlConfig;

@Override
public void init(Router router) {
exchangeExpression = expression(router, language, expression);
exchangeExpression = expression(new InterceptorAdapter(router, xmlConfig), language, expression);
}

@Override
Expand Down Expand Up @@ -95,4 +97,19 @@ public String getExpression() {
public void setExpression(String expression) {
this.expression = expression;
}

/**
* XML Configuration e.g. declaration of XML namespaces for XPath expressions, ...
* @param xmlConfig
*/
@Override
@MCChildElement(allowForeign = true)
public void setXmlConfig(XmlConfig xmlConfig) {
this.xmlConfig = xmlConfig;
}

@Override
public XmlConfig getXmlConfig() {
return xmlConfig;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,14 @@
limitations under the License. */
package com.predic8.membrane.core.interceptor.balancer;

import com.predic8.membrane.annot.MCAttribute;
import com.predic8.membrane.annot.MCElement;
import com.predic8.membrane.annot.Required;
import com.predic8.membrane.core.Router;
import com.predic8.membrane.core.config.AbstractXmlElement;
import com.predic8.membrane.core.exchange.Exchange;
import com.predic8.membrane.core.interceptor.Interceptor.Flow;
import com.predic8.membrane.core.interceptor.lang.Polyglot;
import com.predic8.membrane.core.lang.ExchangeExpression;
import com.predic8.membrane.core.lang.ExchangeExpression.Language;
import com.predic8.membrane.annot.*;
import com.predic8.membrane.core.*;
import com.predic8.membrane.core.config.*;
import com.predic8.membrane.core.exchange.*;
import com.predic8.membrane.core.interceptor.Interceptor.*;
import com.predic8.membrane.core.interceptor.lang.*;
import com.predic8.membrane.core.lang.*;
import com.predic8.membrane.core.lang.ExchangeExpression.*;

import static com.predic8.membrane.core.lang.ExchangeExpression.expression;

Expand All @@ -35,7 +33,7 @@ public class PolyglotSessionIdExtractor extends AbstractXmlElement implements Se

public void init(Router router) {
if (sessionSource != null && !sessionSource.isEmpty()) {
exchangeExpression = expression(router, language, sessionSource);
exchangeExpression = expression(new InterceptorAdapter(router), language, sessionSource);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public class ForInterceptor extends AbstractFlowWithChildrenInterceptor {
public void init() {
super.init();
try {
exchangeExpression = expression(router, language, in);
exchangeExpression = expression(this, language, in);
} catch (ConfigurationException ce) {
throw new ConfigurationException(ce.getMessage() + """

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
package com.predic8.membrane.core.interceptor.flow;

import com.predic8.membrane.annot.*;
import com.predic8.membrane.core.config.xml.*;
import com.predic8.membrane.core.exchange.*;
import com.predic8.membrane.core.interceptor.*;
import com.predic8.membrane.core.lang.*;
Expand All @@ -38,13 +39,14 @@
* @topic 1. Proxies and Flow
*/
@MCElement(name = "if")
public class IfInterceptor extends AbstractFlowWithChildrenInterceptor {
public class IfInterceptor extends AbstractFlowWithChildrenInterceptor implements XMLSupport {
private static final Logger log = LoggerFactory.getLogger(IfInterceptor.class);

private String test;
private Language language = SPEL;

private ExchangeExpression exchangeExpression;
private XmlConfig xmlConfig;

public IfInterceptor() {
name = "if";
Expand All @@ -53,7 +55,7 @@ public IfInterceptor() {
@Override
public void init() {
super.init();
exchangeExpression = expression(router, language, test);
exchangeExpression = expression(this, language, test);
}

@Override
Expand Down Expand Up @@ -131,4 +133,19 @@ public String getShortDescription() {
ret.append("<br/>}");
return ret.toString();
}

/**
* XML Configuration e.g. declaration of XML namespaces for XPath expressions, ...
* @param xmlConfig
*/
@Override
@MCChildElement(allowForeign = true,order = 10)
public void setXmlConfig(XmlConfig xmlConfig) {
this.xmlConfig = xmlConfig;
}

@Override
public XmlConfig getXmlConfig() {
return xmlConfig;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,31 +13,31 @@
limitations under the License. */
package com.predic8.membrane.core.interceptor.flow.choice;

import com.predic8.membrane.annot.MCAttribute;
import com.predic8.membrane.annot.MCElement;
import com.predic8.membrane.annot.Required;
import com.predic8.membrane.core.Router;
import com.predic8.membrane.core.exchange.Exchange;
import com.predic8.membrane.core.interceptor.Interceptor.Flow;
import com.predic8.membrane.core.lang.ExchangeExpression;
import com.predic8.membrane.core.lang.ExchangeExpression.Language;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static com.predic8.membrane.core.lang.ExchangeExpression.Language.SPEL;
import com.predic8.membrane.annot.*;
import com.predic8.membrane.core.*;
import com.predic8.membrane.core.config.xml.*;
import com.predic8.membrane.core.exchange.*;
import com.predic8.membrane.core.interceptor.Interceptor.*;
import com.predic8.membrane.core.interceptor.*;
import com.predic8.membrane.core.lang.*;
import com.predic8.membrane.core.lang.ExchangeExpression.*;
import org.slf4j.*;

import static com.predic8.membrane.core.lang.ExchangeExpression.Language.*;
import static com.predic8.membrane.core.lang.ExchangeExpression.expression;

@MCElement(name = "case", topLevel = false)
public class Case extends InterceptorContainer {
public class Case extends InterceptorContainer implements XMLSupport {

private static final Logger log = LoggerFactory.getLogger(Case.class);

private String test;
private Language language = SPEL;
private ExchangeExpression exchangeExpression;
private XmlConfig xmlConfig;

public void init(Router router) {
exchangeExpression = expression(router, language, test);
exchangeExpression = expression( new InterceptorAdapter(router,xmlConfig), language, test);
}

boolean evaluate(Exchange exc, Flow flow) {
Expand Down Expand Up @@ -77,4 +77,19 @@ public String getTest() {
public void setTest(String test) {
this.test = test;
}

/**
* XML Configuration e.g. declaration of XML namespaces for XPath expressions, ...
* @param xmlConfig
*/
@Override
@MCChildElement(allowForeign = true,order = 10)
public void setXmlConfig(XmlConfig xmlConfig) {
this.xmlConfig = xmlConfig;
}

@Override
public XmlConfig getXmlConfig() {
return xmlConfig;
}
}
Loading