use of com.predic8.membrane.core.interceptor.xmlcontentfilter.SimpleXPathParser.Node in project service-proxy by membrane.
the class EtcdRegistryApiConfig method findAdminConsole.
private EtcdNodeInformation findAdminConsole() {
Object routerObj = context.getBean(Router.class);
if (routerObj == null)
throw new RuntimeException("Router not found, cannot publish admin console");
Router router = (Router) routerObj;
for (Rule r : router.getRuleManager().getRules()) {
if (!(r instanceof AbstractServiceProxy))
continue;
for (Interceptor i : r.getInterceptors()) {
if (i instanceof AdminConsoleInterceptor) {
String name = r.getName();
String host = ((ServiceProxy) r).getExternalHostname();
if (host == null)
host = getLocalHostname();
String port = Integer.toString(((AbstractServiceProxy) r).getPort());
EtcdNodeInformation node = new EtcdNodeInformation(null, null, host, port, name);
return node;
}
}
}
throw new RuntimeException("Admin console not found but is needed. Add a service proxy with an admin console.");
}
use of com.predic8.membrane.core.interceptor.xmlcontentfilter.SimpleXPathParser.Node in project service-proxy by membrane.
the class AdminPageBuilder method createNodesTable.
protected void createNodesTable(String balancerName) throws Exception {
table().attr("cellpadding", "0", "cellspacing", "0", "border", "0", "class", "display nodesTable");
thead();
tr();
createThs("Node", "Status", "Count", "Errors", "Time since last up", "Sessions", "Current Threads", "Action");
end();
end();
tbody();
for (Node n : BalancerUtil.lookupBalancer(router, balancerName).getAllNodesByCluster(params.get("cluster"))) {
tr();
td();
createLink("" + n.getHost() + ":" + n.getPort(), "node", "show", createQueryString("balancer", balancerName, "cluster", params.get("cluster"), "host", n.getHost(), "port", "" + n.getPort()));
end();
createTds(getStatusString(n), "" + n.getCounter(), String.format("%1$.2f%%", n.getErrors() * 100), formatDurationHMS(System.currentTimeMillis() - n.getLastUpTime()), "" + BalancerUtil.lookupBalancer(router, balancerName).getSessionsByNode(params.get("cluster"), n).size(), "" + n.getThreads());
td();
createIcon("ui-icon-eject", "node", "takeout", "takeout", createQuery4Node(n));
createIcon("ui-icon-circle-arrow-n", "node", "up", "up", createQuery4Node(n));
createIcon("ui-icon-circle-arrow-s", "node", "down", "down", createQuery4Node(n));
if (!readOnly)
createIcon("ui-icon-trash", "node", "delete", "delete", createQuery4Node(n));
end();
end();
}
end();
end();
script().raw("$(document).ready(function() { $('.nodesTable').dataTable({'bJQueryUI': true, \"bPaginate\": false}); } );").end();
}
use of com.predic8.membrane.core.interceptor.xmlcontentfilter.SimpleXPathParser.Node in project service-proxy by membrane.
the class XMLContentFilter method createElementFinder.
/**
* Constructs an XMLElementFinder which can make a first decision whether a
* given XPath expression has any chance of succeeding.
*
* This only works if the XPath expression is simple enough. (The XPath
* expression must be a UnionExpr consisting of PathExprs, which start with
* "//foo", optionally followed by "[namespace-uri()='http://bar/']").
*
* @return the xmlElementFinder as described above, or null if the XPath
* expression is too complex.
*/
static XMLElementFinder createElementFinder(String xPath) {
SimpleXPathAnalyzer a = new SimpleXPathAnalyzer();
List<ContainerNode> intersectExceptExprs = a.getIntersectExceptExprs(xPath);
if (intersectExceptExprs == null)
return null;
List<QName> rootElements = new ArrayList<QName>();
for (ContainerNode node : intersectExceptExprs) {
QName n = a.getElement(node);
if (n == null)
return null;
rootElements.add(n);
}
return new XMLElementFinder(rootElements);
}
use of com.predic8.membrane.core.interceptor.xmlcontentfilter.SimpleXPathParser.Node in project service-proxy by membrane.
the class XMLContentFilter method removeElementsIfNecessary.
/**
* @param originalMessage
* @param xopDecodedMessage
* @param doc
* @throws XPathExpressionException
* @throws TransformerException
* @throws TransformerConfigurationException
* @throws TransformerFactoryConfigurationError
*/
private void removeElementsIfNecessary(Message originalMessage, Message xopDecodedMessage, Document doc) throws XPathExpressionException, TransformerException, TransformerConfigurationException, TransformerFactoryConfigurationError {
NodeList toBeDeleted = (NodeList) createXPathExpression().evaluate(doc, XPathConstants.NODESET);
if (toBeDeleted.getLength() > 0) {
// change is necessary
originalMessage.getHeader().removeFields(Header.CONTENT_ENCODING);
if (xopDecodedMessage != null) {
originalMessage.getHeader().removeFields(Header.CONTENT_TYPE);
if (xopDecodedMessage.getHeader().getContentType() != null)
originalMessage.getHeader().setContentType(xopDecodedMessage.getHeader().getContentType());
}
for (int i = 0; i < toBeDeleted.getLength(); i++) {
Node n = toBeDeleted.item(i);
n.getParentNode().removeChild(n);
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
createTransformer().transform(new DOMSource(doc), new StreamResult(baos));
originalMessage.setBodyContent(baos.toByteArray());
}
}
use of com.predic8.membrane.core.interceptor.xmlcontentfilter.SimpleXPathParser.Node in project service-proxy by membrane.
the class BlueprintElementParser method parseChildren.
protected void parseChildren(Element element, ParserContext context, MutableBeanMetadata mcm, BlueprintParser globalParser) {
element.setUserData(BlueprintNamespaceParser.KEY_PARENT_CLASS_NAME, mcm.getRuntimeClass().getName(), null);
NodeList nl = element.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
Node node = nl.item(i);
if (node instanceof Element) {
handleChildElement((Element) node, context, mcm, globalParser);
}
}
}
Aggregations