Author: alessio.soldano(a)jboss.com
Date: 2010-11-27 21:24:33 -0500 (Sat, 27 Nov 2010)
New Revision: 13348
Added:
spi/trunk/src/main/java/org/jboss/wsf/spi/util/StAXUtils.java
spi/trunk/src/test/java/org/jboss/test/wsf/spi/metadata/
spi/trunk/src/test/java/org/jboss/test/wsf/spi/metadata/j2ee/
spi/trunk/src/test/java/org/jboss/test/wsf/spi/metadata/j2ee/serviceref/
spi/trunk/src/test/java/org/jboss/test/wsf/spi/metadata/j2ee/serviceref/UnifiedHandlersChainsMDParserTestCase.java
spi/trunk/src/test/resources/metadata/
spi/trunk/src/test/resources/metadata/j2ee/
spi/trunk/src/test/resources/metadata/j2ee/serviceref/
spi/trunk/src/test/resources/metadata/j2ee/serviceref/test-handlers.xml
Modified:
spi/trunk/src/main/java/org/jboss/wsf/spi/metadata/j2ee/serviceref/UnifiedHandlerChainsMetaDataParser.java
spi/trunk/src/main/java/org/jboss/wsf/spi/metadata/jms/JMSEndpointsFactory.java
Log:
[JBWS-3169] Providing StAX based parser for handler chains descriptor to replace the
JBossXB based one; adding unit testcase for UnifiedHandlersChainsMetaData creation
Modified:
spi/trunk/src/main/java/org/jboss/wsf/spi/metadata/j2ee/serviceref/UnifiedHandlerChainsMetaDataParser.java
===================================================================
---
spi/trunk/src/main/java/org/jboss/wsf/spi/metadata/j2ee/serviceref/UnifiedHandlerChainsMetaDataParser.java 2010-11-28
02:21:57 UTC (rev 13347)
+++
spi/trunk/src/main/java/org/jboss/wsf/spi/metadata/j2ee/serviceref/UnifiedHandlerChainsMetaDataParser.java 2010-11-28
02:24:33 UTC (rev 13348)
@@ -21,12 +21,20 @@
*/
package org.jboss.wsf.spi.metadata.j2ee.serviceref;
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+import static org.jboss.wsf.spi.util.StAXUtils.createXMLStreamReader;
+import static org.jboss.wsf.spi.util.StAXUtils.elementAsQName;
+import static org.jboss.wsf.spi.util.StAXUtils.elementAsString;
+import static org.jboss.wsf.spi.util.StAXUtils.match;
+
import java.io.IOException;
import java.io.InputStream;
-import org.jboss.xb.binding.JBossXBException;
-import org.jboss.xb.binding.Unmarshaller;
-import org.jboss.xb.binding.UnmarshallerFactory;
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
/** The interface of the parser for the unified metadata handler chains element
*
@@ -35,17 +43,213 @@
*/
public class UnifiedHandlerChainsMetaDataParser
{
- @SuppressWarnings("deprecation")
+ private static final String JAVAEE_NS =
"http://java.sun.com/xml/ns/javaee";
+ private static final QName QNAME_CHAIN_PORT_PATTERN = new QName(JAVAEE_NS,
"port-name-pattern");
+ private static final QName QNAME_CHAIN_PROTOCOL_BINDING = new QName(JAVAEE_NS,
"protocol-bindings");
+ private static final QName QNAME_CHAIN_SERVICE_PATTERN = new QName(JAVAEE_NS,
"service-name-pattern");
+ private static final QName QNAME_HANDLER_CHAIN = new QName(JAVAEE_NS,
"handler-chain");
+ private static final QName QNAME_HANDLER_CHAINS = new QName(JAVAEE_NS,
"handler-chains");
+ private static final QName QNAME_HANDLER = new QName(JAVAEE_NS, "handler");
+ private static final QName QNAME_HANDLER_NAME = new QName(JAVAEE_NS,
"handler-name");
+ private static final QName QNAME_HANDLER_CLASS = new QName(JAVAEE_NS,
"handler-class");
+ private static final QName QNAME_HANDLER_PARAM = new QName(JAVAEE_NS,
"init-param");
+ private static final QName QNAME_HANDLER_PARAM_NAME = new QName(JAVAEE_NS,
"param-name");
+ private static final QName QNAME_HANDLER_PARAM_VALUE = new QName(JAVAEE_NS,
"param-value");
+
public static UnifiedHandlerChainsMetaData parse(InputStream is) throws IOException
{
+ //
http://java.sun.com/xml/ns/javaee/javaee_web_services_1_2.xsd
try
{
- Unmarshaller unmarshaller =
UnmarshallerFactory.newInstance().newUnmarshaller();
- return (UnifiedHandlerChainsMetaData) unmarshaller.unmarshal(is, new
HandlerChainsObjectFactory(), null);
+ XMLStreamReader xmlr = createXMLStreamReader(is);
+ return parse(xmlr);
}
- catch (JBossXBException xbe)
+ catch (XMLStreamException e)
{
- throw new IOException(xbe);
+ throw new IOException(e);
}
}
+
+ public static UnifiedHandlerChainsMetaData parse(XMLStreamReader reader) throws
XMLStreamException
+ {
+ int iterate;
+ try
+ {
+ iterate = reader.nextTag();
+ }
+ catch (XMLStreamException e)
+ {
+ // skip non-tag elements
+ iterate = reader.nextTag();
+ }
+ UnifiedHandlerChainsMetaData handlerChains = null;
+ switch (iterate)
+ {
+ case END_ELEMENT : {
+ // we're done
+ break;
+ }
+ case START_ELEMENT : {
+
+ if (match(reader, QNAME_HANDLER_CHAINS))
+ {
+ handlerChains = parseHandlerChains(reader);
+ }
+ else
+ {
+ throw new IllegalStateException("Unexpected element: " +
reader.getLocalName());
+ }
+ }
+ }
+ return handlerChains;
+ }
+
+ private static UnifiedHandlerChainsMetaData parseHandlerChains(XMLStreamReader reader)
throws XMLStreamException
+ {
+ UnifiedHandlerChainsMetaData handlerChains = new UnifiedHandlerChainsMetaData();
+ while (reader.hasNext())
+ {
+ switch (reader.nextTag())
+ {
+ case XMLStreamConstants.END_ELEMENT : {
+ if (match(reader, QNAME_HANDLER_CHAINS))
+ {
+ return handlerChains;
+ }
+ else
+ {
+ throw new IllegalStateException("Unexpected end tag: " +
reader.getLocalName());
+ }
+ }
+ case XMLStreamConstants.START_ELEMENT : {
+ if (match(reader, QNAME_HANDLER_CHAIN)) {
+ handlerChains.addHandlerChain(parseHandlerChain(reader,
handlerChains));
+ }
+ else
+ {
+ throw new IllegalStateException("Unexpected element: " +
reader.getLocalName());
+ }
+ }
+ }
+ }
+ throw new IllegalStateException("Reached end of xml document
unexpectedly");
+ }
+
+ private static UnifiedHandlerChainMetaData parseHandlerChain(XMLStreamReader reader,
UnifiedHandlerChainsMetaData handlerChains) throws XMLStreamException
+ {
+ UnifiedHandlerChainMetaData handlerChain = new
UnifiedHandlerChainMetaData(handlerChains);
+ while (reader.hasNext())
+ {
+ switch (reader.nextTag())
+ {
+ case XMLStreamConstants.END_ELEMENT : {
+ if (match(reader, QNAME_HANDLER_CHAIN))
+ {
+ return handlerChain;
+ }
+ else
+ {
+ throw new IllegalStateException("Unexpected end tag: " +
reader.getLocalName());
+ }
+ }
+ case XMLStreamConstants.START_ELEMENT : {
+ if (match(reader, QNAME_CHAIN_PORT_PATTERN))
+ {
+ handlerChain.setPortNamePattern(elementAsQName(reader));
+ }
+ else if (match(reader, QNAME_CHAIN_SERVICE_PATTERN))
+ {
+ handlerChain.setServiceNamePattern(elementAsQName(reader));
+ }
+ else if(match(reader, QNAME_CHAIN_PROTOCOL_BINDING))
+ {
+ handlerChain.setProtocolBindings(elementAsString(reader));
+ }
+ else if (match(reader, QNAME_HANDLER)) {
+ handlerChain.addHandler(parseHandler(reader, handlerChain));
+ }
+ else
+ {
+ throw new IllegalStateException("Unexpected element: " +
reader.getLocalName());
+ }
+ }
+ }
+ }
+ throw new IllegalStateException("Reached end of xml document
unexpectedly");
+ }
+
+ private static UnifiedHandlerMetaData parseHandler(XMLStreamReader reader,
UnifiedHandlerChainMetaData handlerChain) throws XMLStreamException
+ {
+ UnifiedHandlerMetaData handler = new UnifiedHandlerMetaData(handlerChain);
+ while (reader.hasNext())
+ {
+ switch (reader.nextTag())
+ {
+ case XMLStreamConstants.END_ELEMENT : {
+ if (match(reader, QNAME_HANDLER))
+ {
+ return handler;
+ }
+ else
+ {
+ throw new IllegalStateException("Unexpected end tag: " +
reader.getLocalName());
+ }
+ }
+ case XMLStreamConstants.START_ELEMENT : {
+ if (match(reader, QNAME_HANDLER_NAME))
+ {
+ handler.setHandlerName(elementAsString(reader));
+ }
+ else if (match(reader, QNAME_HANDLER_CLASS))
+ {
+ handler.setHandlerClass(elementAsString(reader));
+ }
+ else if (match(reader, QNAME_HANDLER_PARAM)) {
+ handler.addInitParam(parseInitParam(reader));
+ }
+ else
+ {
+ throw new IllegalStateException("Unexpected element: " +
reader.getLocalName());
+ }
+ }
+ }
+ }
+ throw new IllegalStateException("Reached end of xml document
unexpectedly");
+ }
+
+ private static UnifiedInitParamMetaData parseInitParam(XMLStreamReader reader) throws
XMLStreamException
+ {
+ UnifiedInitParamMetaData initParam = new UnifiedInitParamMetaData();
+ while (reader.hasNext())
+ {
+ switch (reader.nextTag())
+ {
+ case XMLStreamConstants.END_ELEMENT : {
+ if (match(reader, QNAME_HANDLER_PARAM))
+ {
+ return initParam;
+ }
+ else
+ {
+ throw new IllegalStateException("Unexpected end tag: " +
reader.getLocalName());
+ }
+ }
+ case XMLStreamConstants.START_ELEMENT : {
+ if (match(reader, QNAME_HANDLER_PARAM_NAME))
+ {
+ initParam.setParamName(elementAsString(reader));
+ }
+ else if (match(reader, QNAME_HANDLER_PARAM_VALUE))
+ {
+ initParam.setParamValue(elementAsString(reader));
+ }
+ else
+ {
+ throw new IllegalStateException("Unexpected element: " +
reader.getLocalName());
+ }
+ }
+ }
+ }
+ throw new IllegalStateException("Reached end of xml document
unexpectedly");
+ }
}
Modified: spi/trunk/src/main/java/org/jboss/wsf/spi/metadata/jms/JMSEndpointsFactory.java
===================================================================
---
spi/trunk/src/main/java/org/jboss/wsf/spi/metadata/jms/JMSEndpointsFactory.java 2010-11-28
02:21:57 UTC (rev 13347)
+++
spi/trunk/src/main/java/org/jboss/wsf/spi/metadata/jms/JMSEndpointsFactory.java 2010-11-28
02:24:33 UTC (rev 13348)
@@ -23,7 +23,6 @@
import java.net.URL;
-import org.jboss.logging.Logger;
import org.jboss.xb.binding.ObjectModelFactory;
import org.jboss.xb.binding.UnmarshallingContext;
import org.xml.sax.Attributes;
Added: spi/trunk/src/main/java/org/jboss/wsf/spi/util/StAXUtils.java
===================================================================
--- spi/trunk/src/main/java/org/jboss/wsf/spi/util/StAXUtils.java
(rev 0)
+++ spi/trunk/src/main/java/org/jboss/wsf/spi/util/StAXUtils.java 2010-11-28 02:24:33 UTC
(rev 13348)
@@ -0,0 +1,136 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.wsf.spi.util;
+
+import java.io.InputStream;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLResolver;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+/**
+ * StAX utils
+ *
+ * @author alessio.soldano(a)jboss.com
+ * @since 27-Nov-2010
+ */
+public class StAXUtils
+{
+ private static final BlockingQueue<XMLInputFactory> INPUT_FACTORY_POOL;
+
+ static
+ {
+ int i = 10;
+ try
+ {
+ String s = System.getProperty("org.jboss.ws.staxutils.pool-size",
"10");
+ i = Integer.parseInt(s);
+ }
+ catch (Throwable t)
+ {
+ i = 10;
+ }
+ if (i <= 0)
+ {
+ i = 10;
+ }
+ INPUT_FACTORY_POOL = new LinkedBlockingQueue<XMLInputFactory>(i);
+ }
+
+ /**
+ * Return a new factory so that the caller can set sticky parameters.
+ * @param nsAware
+ * @return
+ */
+ public static XMLInputFactory createXMLInputFactory(boolean nsAware)
+ {
+ XMLInputFactory factory = XMLInputFactory.newInstance();
+ factory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, nsAware);
+ factory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
+ factory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,
Boolean.FALSE);
+ factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,
Boolean.FALSE);
+ factory.setXMLResolver(new XMLResolver()
+ {
+ public Object resolveEntity(String publicID, String systemID, String baseURI,
String namespace)
+ throws XMLStreamException
+ {
+ throw new XMLStreamException("Reading external entities is
disabled");
+ }
+ });
+ return factory;
+ }
+
+ private static XMLInputFactory getXMLInputFactory()
+ {
+ XMLInputFactory f = INPUT_FACTORY_POOL.poll();
+ if (f == null)
+ {
+ f = createXMLInputFactory(true);
+ }
+ return f;
+ }
+
+ private static void returnXMLInputFactory(XMLInputFactory factory)
+ {
+ INPUT_FACTORY_POOL.offer(factory);
+ }
+
+ public static XMLStreamReader createXMLStreamReader(InputStream in)
+ {
+ XMLInputFactory factory = getXMLInputFactory();
+ try
+ {
+ return factory.createXMLStreamReader(in);
+ }
+ catch (XMLStreamException e)
+ {
+ throw new RuntimeException("Couldn't parse stream.", e);
+ }
+ finally
+ {
+ returnXMLInputFactory(factory);
+ }
+ }
+
+ public static boolean match(XMLStreamReader reader, QName name)
+ {
+ return reader.getName().equals(name);
+ }
+
+ public static String elementAsString(XMLStreamReader reader) throws
XMLStreamException
+ {
+ String elementtext = reader.getElementText();
+ return elementtext == null ? null : elementtext.trim();
+ }
+
+ public static QName elementAsQName(XMLStreamReader reader) throws XMLStreamException
+ {
+ String namespaceURI = reader.getNamespaceURI(0);
+ String text = reader.getElementText();
+ String localPart = text.substring(text.indexOf(':') + 1, text.length());
+ return new QName(namespaceURI, localPart);
+ }
+}
Added:
spi/trunk/src/test/java/org/jboss/test/wsf/spi/metadata/j2ee/serviceref/UnifiedHandlersChainsMDParserTestCase.java
===================================================================
---
spi/trunk/src/test/java/org/jboss/test/wsf/spi/metadata/j2ee/serviceref/UnifiedHandlersChainsMDParserTestCase.java
(rev 0)
+++
spi/trunk/src/test/java/org/jboss/test/wsf/spi/metadata/j2ee/serviceref/UnifiedHandlersChainsMDParserTestCase.java 2010-11-28
02:24:33 UTC (rev 13348)
@@ -0,0 +1,105 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.test.wsf.spi.metadata.j2ee.serviceref;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerChainMetaData;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerChainsMetaData;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerChainsMetaDataParser;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerMetaData;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedInitParamMetaData;
+
+/**
+ * Test the UnifiedHandlersChainsMetaDataParser
+ *
+ * @author alessio.soldano(a)jboss.com
+ * @since 27-Nov-2010
+ */
+public class UnifiedHandlersChainsMDParserTestCase extends TestCase
+{
+ public void testParse() throws Exception
+ {
+ InputStream is = new FileInputStream(new
File("src/test/resources/metadata/j2ee/serviceref/test-handlers.xml"));
+ UnifiedHandlerChainsMetaData metadata =
UnifiedHandlerChainsMetaDataParser.parse(is);
+ List<UnifiedHandlerChainMetaData> chains = metadata.getHandlerChains();
+ assertEquals(2, chains.size());
+ testHandlerChain1(chains.get(0));
+ testHandlerChain2(chains.get(1));
+ }
+
+ private void testHandlerChain1(UnifiedHandlerChainMetaData chain)
+ {
+ assertEquals(new
QName("http://ws.jboss.org/jbws2949",
"EndpointPort", "foo"), chain.getPortNamePattern());
+ assertEquals(new
QName("http://ws.jboss.org/jbws2949",
"EndpointService", "foo"), chain.getServiceNamePattern());
+ assertEquals("##SOAP11_HTTP", chain.getProtocolBindings());
+ List<UnifiedHandlerMetaData> handlers = chain.getHandlers();
+ assertEquals(1, handlers.size());
+ UnifiedHandlerMetaData handler = handlers.get(0);
+ assertEquals(chain, handler.getHandlerChain());
+ assertEquals("SOAPServerHandler1", handler.getHandlerName());
+ assertEquals("org.jboss.test.ws.jaxws.jbws2949.SOAPHandler1",
handler.getHandlerClass());
+ List<UnifiedInitParamMetaData> params = handler.getInitParams();
+ assertEquals(2, params.size());
+ assertEquals("foo", params.get(0).getParamName());
+ assertEquals("1", params.get(0).getParamValue());
+ assertEquals("bar", params.get(1).getParamName());
+ assertEquals("2", params.get(1).getParamValue());
+ assertEquals(0, handler.getPortNames().size());
+ assertEquals(0, handler.getSoapHeaders().size());
+ assertEquals(0, handler.getSoapRoles().size());
+ }
+
+ private void testHandlerChain2(UnifiedHandlerChainMetaData chain)
+ {
+ assertEquals(new
QName("http://ws.jboss.org/jbws2949",
"EndpointPort2", "foo"), chain.getPortNamePattern());
+ assertEquals(null, chain.getServiceNamePattern());
+ assertEquals(null, chain.getProtocolBindings());
+ List<UnifiedHandlerMetaData> handlers = chain.getHandlers();
+ assertEquals(2, handlers.size());
+ UnifiedHandlerMetaData handler1 = handlers.get(0);
+ assertEquals(chain, handler1.getHandlerChain());
+ assertEquals("SOAPServerHandler2", handler1.getHandlerName());
+ assertEquals("org.jboss.test.ws.jaxws.jbws2949.SOAPHandler2",
handler1.getHandlerClass());
+ assertEquals(0, handler1.getInitParams().size());
+ assertEquals(0, handler1.getPortNames().size());
+ assertEquals(0, handler1.getSoapHeaders().size());
+ assertEquals(0, handler1.getSoapRoles().size());
+
+ UnifiedHandlerMetaData handler2 = handlers.get(1);
+ assertEquals(chain, handler2.getHandlerChain());
+ assertEquals("SOAPServerHandler3", handler2.getHandlerName());
+ assertEquals("org.jboss.test.ws.jaxws.jbws2949.SOAPHandler3",
handler2.getHandlerClass());
+ assertEquals(0, handler2.getInitParams().size());
+ assertEquals(0, handler2.getPortNames().size());
+ assertEquals(0, handler2.getSoapHeaders().size());
+ assertEquals(0, handler2.getSoapRoles().size());
+
+ }
+}
\ No newline at end of file
Added: spi/trunk/src/test/resources/metadata/j2ee/serviceref/test-handlers.xml
===================================================================
--- spi/trunk/src/test/resources/metadata/j2ee/serviceref/test-handlers.xml
(rev 0)
+++ spi/trunk/src/test/resources/metadata/j2ee/serviceref/test-handlers.xml 2010-11-28
02:24:33 UTC (rev 13348)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<handler-chains
xmlns="http://java.sun.com/xml/ns/javaee"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns1="http://org.jboss.ws/jaxws/samples/logicalhandler"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
javaee_web_services_1_2.xsd">
+
+ <handler-chain>
+ <service-name-pattern
xmlns:foo="http://ws.jboss.org/jbws2949">foo:EndpointService...
+ <port-name-pattern
xmlns:foo="http://ws.jboss.org/jbws2949">foo:EndpointPort<...
+ <protocol-bindings>##SOAP11_HTTP</protocol-bindings>
+ <handler>
+ <handler-name>SOAPServerHandler1</handler-name>
+ <handler-class>org.jboss.test.ws.jaxws.jbws2949.SOAPHandler1</handler-class>
+ <init-param>
+ <param-name>foo</param-name>
+ <param-value>1</param-value>
+ </init-param>
+ <init-param>
+ <param-name>bar</param-name>
+ <param-value>2</param-value>
+ </init-param>
+ </handler>
+ </handler-chain>
+
+ <handler-chain>
+ <port-name-pattern
xmlns:ns1="http://ws.jboss.org/jbws2949">ns1:EndpointPort2&l...
+ <handler>
+ <handler-name>SOAPServerHandler2</handler-name>
+ <handler-class>org.jboss.test.ws.jaxws.jbws2949.SOAPHandler2</handler-class>
+ </handler>
+ <handler>
+ <handler-name>SOAPServerHandler3</handler-name>
+ <handler-class>org.jboss.test.ws.jaxws.jbws2949.SOAPHandler3</handler-class>
+ </handler>
+ </handler-chain>
+</handler-chains>
\ No newline at end of file