aoqi@0: /* aoqi@0: * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. aoqi@0: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. aoqi@0: * aoqi@0: * This code is free software; you can redistribute it and/or modify it aoqi@0: * under the terms of the GNU General Public License version 2 only, as aoqi@0: * published by the Free Software Foundation. Oracle designates this aoqi@0: * particular file as subject to the "Classpath" exception as provided aoqi@0: * by Oracle in the LICENSE file that accompanied this code. aoqi@0: * aoqi@0: * This code is distributed in the hope that it will be useful, but WITHOUT aoqi@0: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or aoqi@0: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License aoqi@0: * version 2 for more details (a copy is included in the LICENSE file that aoqi@0: * accompanied this code). aoqi@0: * aoqi@0: * You should have received a copy of the GNU General Public License version aoqi@0: * 2 along with this work; if not, write to the Free Software Foundation, aoqi@0: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. aoqi@0: * aoqi@0: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA aoqi@0: * or visit www.oracle.com if you need additional information or have any aoqi@0: * questions. aoqi@0: */ aoqi@0: aoqi@0: package com.sun.tools.internal.ws.wsdl.parser; aoqi@0: aoqi@0: import com.sun.tools.internal.ws.api.wsdl.TWSDLExtensible; aoqi@0: import com.sun.tools.internal.ws.api.wsdl.TWSDLExtension; aoqi@0: import com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext; aoqi@0: import com.sun.tools.internal.ws.util.xml.XmlUtil; aoqi@0: import com.sun.tools.internal.ws.wsdl.document.*; aoqi@0: import com.sun.tools.internal.ws.wsdl.document.jaxws.CustomName; aoqi@0: import com.sun.tools.internal.ws.wsdl.document.jaxws.JAXWSBinding; aoqi@0: import com.sun.tools.internal.ws.wsdl.document.jaxws.JAXWSBindingsConstants; aoqi@0: import com.sun.tools.internal.ws.wsdl.document.jaxws.Parameter; aoqi@0: import org.w3c.dom.Element; aoqi@0: import org.w3c.dom.Node; aoqi@0: import org.w3c.dom.NodeList; aoqi@0: aoqi@0: import javax.xml.namespace.NamespaceContext; aoqi@0: import javax.xml.namespace.QName; aoqi@0: import javax.xml.xpath.*; aoqi@0: import java.util.Iterator; aoqi@0: import java.util.Map; aoqi@0: aoqi@0: aoqi@0: /** aoqi@0: * @author Vivek Pandey aoqi@0: * aoqi@0: * jaxws:bindings exension handler. aoqi@0: * aoqi@0: */ aoqi@0: public class JAXWSBindingExtensionHandler extends AbstractExtensionHandler { aoqi@0: aoqi@0: // xml security enabled always, xpath used for parsing "part" attribute aoqi@0: private static final ContextClassloaderLocal xpf = new ContextClassloaderLocal() { aoqi@0: @Override aoqi@0: protected XPathFactory initialValue() throws Exception { aoqi@0: return XPathFactory.newInstance(); aoqi@0: } aoqi@0: }; aoqi@0: aoqi@0: private final XPath xpath = xpf.get().newXPath(); aoqi@0: aoqi@0: public JAXWSBindingExtensionHandler(Map extensionHandlerMap) { aoqi@0: super(extensionHandlerMap); aoqi@0: } aoqi@0: aoqi@0: /* (non-Javadoc) aoqi@0: * @see AbstractExtensionHandler#getNamespaceURI() aoqi@0: */ aoqi@0: @Override aoqi@0: public String getNamespaceURI() { aoqi@0: return JAXWSBindingsConstants.NS_JAXWS_BINDINGS; aoqi@0: } aoqi@0: aoqi@0: /** aoqi@0: * @param context aoqi@0: * @param parent aoqi@0: * @param e aoqi@0: */ aoqi@0: private boolean parseGlobalJAXWSBindings(TWSDLParserContext context, TWSDLExtensible parent, Element e) { aoqi@0: context.push(); aoqi@0: context.registerNamespaces(e); aoqi@0: aoqi@0: JAXWSBinding jaxwsBinding = getJAXWSExtension(parent); aoqi@0: if(jaxwsBinding == null) { aoqi@0: jaxwsBinding = new JAXWSBinding(context.getLocation(e)); aoqi@0: } aoqi@0: String attr = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.WSDL_LOCATION_ATTR); aoqi@0: if (attr != null) { aoqi@0: jaxwsBinding.setWsdlLocation(attr); aoqi@0: } aoqi@0: aoqi@0: attr = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NODE_ATTR); aoqi@0: if (attr != null) { aoqi@0: jaxwsBinding.setNode(attr); aoqi@0: } aoqi@0: aoqi@0: attr = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.VERSION_ATTR); aoqi@0: if (attr != null) { aoqi@0: jaxwsBinding.setVersion(attr); aoqi@0: } aoqi@0: aoqi@0: for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ aoqi@0: Element e2 = Util.nextElement(iter); aoqi@0: if (e2 == null) { aoqi@0: break; aoqi@0: } aoqi@0: aoqi@0: if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PACKAGE)) { aoqi@0: parsePackage(context, jaxwsBinding, e2); aoqi@0: if ((jaxwsBinding.getJaxwsPackage() != null) && (jaxwsBinding.getJaxwsPackage().getJavaDoc() != null)) { aoqi@0: ((Definitions) parent).setDocumentation(new Documentation(jaxwsBinding.getJaxwsPackage().getJavaDoc())); aoqi@0: } aoqi@0: } else if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_WRAPPER_STYLE)) { aoqi@0: parseWrapperStyle(context, jaxwsBinding, e2); aoqi@0: } else if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ASYNC_MAPPING)) { aoqi@0: parseAsynMapping(context, jaxwsBinding, e2); aoqi@0: } // else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ADDITIONAL_SOAPHEADER_MAPPING)){ aoqi@0: // parseAdditionalSOAPHeaderMapping(context, jaxwsBinding, e2); aoqi@0: // } aoqi@0: else if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_MIME_CONTENT)) { aoqi@0: parseMimeContent(context, jaxwsBinding, e2); aoqi@0: } else { aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e2.getTagName(), aoqi@0: e2.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: parent.addExtension(jaxwsBinding); aoqi@0: context.pop(); aoqi@0: // context.fireDoneParsingEntity( aoqi@0: // JAXWSBindingsConstants.JAXWS_BINDINGS, aoqi@0: // jaxwsBinding); aoqi@0: return true; aoqi@0: } aoqi@0: aoqi@0: private static JAXWSBinding getJAXWSExtension(TWSDLExtensible extensible) { aoqi@0: for (TWSDLExtension extension:extensible.extensions()) { aoqi@0: if (extension.getClass().equals(JAXWSBinding.class)) { aoqi@0: return (JAXWSBinding)extension; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: return null; aoqi@0: } aoqi@0: aoqi@0: /** aoqi@0: * @param context aoqi@0: * @param parent aoqi@0: * @param e aoqi@0: */ aoqi@0: private void parseProvider(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { aoqi@0: String val = e.getTextContent(); aoqi@0: if (val == null) { aoqi@0: return; aoqi@0: } aoqi@0: if (val.equals("false") || val.equals("0")) { aoqi@0: ((JAXWSBinding)parent).setProvider(Boolean.FALSE); aoqi@0: } else if(val.equals("true") || val.equals("1")) { aoqi@0: ((JAXWSBinding)parent).setProvider(Boolean.TRUE); aoqi@0: } aoqi@0: aoqi@0: } aoqi@0: aoqi@0: /** aoqi@0: * @param context aoqi@0: * @param parent aoqi@0: * @param e aoqi@0: */ aoqi@0: private void parsePackage(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { aoqi@0: //System.out.println("In handlePackageExtension: " + e.getNodeName()); aoqi@0: String packageName = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); aoqi@0: JAXWSBinding binding = (JAXWSBinding)parent; aoqi@0: binding.setJaxwsPackage(new CustomName(packageName, getJavaDoc(e))); aoqi@0: } aoqi@0: aoqi@0: /** aoqi@0: * @param context aoqi@0: * @param parent aoqi@0: * @param e aoqi@0: */ aoqi@0: private void parseWrapperStyle(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { aoqi@0: //System.out.println("In handleWrapperStyleExtension: " + e.getNodeName()); aoqi@0: String val = e.getTextContent(); aoqi@0: if (val == null) { aoqi@0: return; aoqi@0: } aoqi@0: if (val.equals("false") || val.equals("0")) { aoqi@0: ((JAXWSBinding) parent).setEnableWrapperStyle(Boolean.FALSE); aoqi@0: } else if (val.equals("true") || val.equals("1")) { aoqi@0: ((JAXWSBinding) parent).setEnableWrapperStyle(Boolean.TRUE); aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: /** aoqi@0: * @param context aoqi@0: * @param parent aoqi@0: * @param e aoqi@0: */ aoqi@0: // private void parseAdditionalSOAPHeaderMapping(TWSDLParserContextImpl context, TWSDLExtensible parent, Element e) { aoqi@0: // //System.out.println("In handleAdditionalSOAPHeaderExtension: " + e.getNodeName()); aoqi@0: // String val = e.getTextContent(); aoqi@0: // if(val == null) aoqi@0: // return; aoqi@0: // if(val.equals("false") || val.equals("0")){ aoqi@0: // ((JAXWSBinding)parent).setEnableAdditionalHeaderMapping(Boolean.FALSE); aoqi@0: // }else if(val.equals("true") || val.equals("1")){ aoqi@0: // ((JAXWSBinding)parent).setEnableAdditionalHeaderMapping(Boolean.TRUE); aoqi@0: // } aoqi@0: // } aoqi@0: aoqi@0: /** aoqi@0: * @param context aoqi@0: * @param parent aoqi@0: * @param e aoqi@0: */ aoqi@0: private void parseAsynMapping(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { aoqi@0: //System.out.println("In handleAsynMappingExtension: " + e.getNodeName()); aoqi@0: String val = e.getTextContent(); aoqi@0: if (val == null) { aoqi@0: return; aoqi@0: } aoqi@0: if (val.equals("false") || val.equals("0")) { aoqi@0: ((JAXWSBinding) parent).setEnableAsyncMapping(Boolean.FALSE); aoqi@0: } else if (val.equals("true") || val.equals("1")) { aoqi@0: ((JAXWSBinding) parent).setEnableAsyncMapping(Boolean.TRUE); aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: /** aoqi@0: * @param context aoqi@0: * @param parent aoqi@0: * @param e aoqi@0: */ aoqi@0: private void parseMimeContent(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding parent, Element e) { aoqi@0: //System.out.println("In handleMimeContentExtension: " + e.getNodeName()); aoqi@0: String val = e.getTextContent(); aoqi@0: if (val == null) { aoqi@0: return; aoqi@0: } aoqi@0: if (val.equals("false") || val.equals("0")) { aoqi@0: ((JAXWSBinding) parent).setEnableMimeContentMapping(Boolean.FALSE); aoqi@0: } else if (val.equals("true") || val.equals("1")) { aoqi@0: ((JAXWSBinding) parent).setEnableMimeContentMapping(Boolean.TRUE); aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: /** aoqi@0: * @param context aoqi@0: * @param jaxwsBinding aoqi@0: * @param e aoqi@0: */ aoqi@0: private void parseMethod(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding jaxwsBinding, Element e) { aoqi@0: String methodName = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); aoqi@0: String javaDoc = getJavaDoc(e); aoqi@0: CustomName name = new CustomName(methodName, javaDoc); aoqi@0: jaxwsBinding.setMethodName(name); aoqi@0: } aoqi@0: aoqi@0: /** aoqi@0: * @param context aoqi@0: * @param jaxwsBinding aoqi@0: * @param e aoqi@0: */ aoqi@0: private void parseParameter(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding jaxwsBinding, Element e) { aoqi@0: String part = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.PART_ATTR); aoqi@0: Element msgPartElm = evaluateXPathNode(e.getOwnerDocument(), part, new NamespaceContextImpl(e)); aoqi@0: Node msgElm = msgPartElm.getParentNode(); aoqi@0: //MessagePart msgPart = new MessagePart(); aoqi@0: aoqi@0: String partName = XmlUtil.getAttributeOrNull(msgPartElm, "name"); aoqi@0: String msgName = XmlUtil.getAttributeOrNull((Element)msgElm, "name"); aoqi@0: if ((partName == null) || (msgName == null)) { aoqi@0: return; aoqi@0: } aoqi@0: aoqi@0: String element = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.ELEMENT_ATTR); aoqi@0: String name = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); aoqi@0: aoqi@0: QName elementName = null; aoqi@0: if(element != null){ aoqi@0: String uri = e.lookupNamespaceURI(XmlUtil.getPrefix(element)); aoqi@0: elementName = (uri == null)?null:new QName(uri, XmlUtil.getLocalPart(element)); aoqi@0: } aoqi@0: aoqi@0: jaxwsBinding.addParameter(new Parameter(msgName, partName, elementName, name)); aoqi@0: } aoqi@0: aoqi@0: private Element evaluateXPathNode(Node target, String expression, NamespaceContext namespaceContext) { aoqi@0: NodeList nlst; aoqi@0: try { aoqi@0: xpath.setNamespaceContext(namespaceContext); aoqi@0: nlst = (NodeList)xpath.evaluate(expression, target, XPathConstants.NODESET); aoqi@0: } catch (XPathExpressionException e) { aoqi@0: Util.fail("internalizer.XPathEvaluationError", e.getMessage()); aoqi@0: return null; // abort processing this aoqi@0: } aoqi@0: aoqi@0: if( nlst.getLength()==0 ) { aoqi@0: Util.fail("internalizer.XPathEvaluatesToNoTarget", new Object[]{expression}); aoqi@0: return null; // abort aoqi@0: } aoqi@0: aoqi@0: if( nlst.getLength()!=1 ) { aoqi@0: Util.fail("internalizer.XPathEvaulatesToTooManyTargets", new Object[]{expression, nlst.getLength()}); aoqi@0: return null; // abort aoqi@0: } aoqi@0: aoqi@0: Node rnode = nlst.item(0); aoqi@0: if(!(rnode instanceof Element )) { aoqi@0: Util.fail("internalizer.XPathEvaluatesToNonElement", new Object[]{expression}); aoqi@0: return null; // abort aoqi@0: } aoqi@0: return (Element)rnode; aoqi@0: } aoqi@0: aoqi@0: /** aoqi@0: * @param context aoqi@0: * @param jaxwsBinding aoqi@0: * @param e aoqi@0: */ aoqi@0: private void parseClass(com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext context, JAXWSBinding jaxwsBinding, Element e) { aoqi@0: String className = XmlUtil.getAttributeOrNull(e, JAXWSBindingsConstants.NAME_ATTR); aoqi@0: String javaDoc = getJavaDoc(e); aoqi@0: jaxwsBinding.setClassName(new CustomName(className, javaDoc)); aoqi@0: } aoqi@0: aoqi@0: aoqi@0: @Override aoqi@0: public boolean handleDefinitionsExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { aoqi@0: return parseGlobalJAXWSBindings(context, parent, e); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public boolean handlePortTypeExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { aoqi@0: if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ aoqi@0: context.push(); aoqi@0: context.registerNamespaces(e); aoqi@0: JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); aoqi@0: aoqi@0: for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ aoqi@0: Element e2 = Util.nextElement(iter); aoqi@0: if (e2 == null) { aoqi@0: break; aoqi@0: } aoqi@0: aoqi@0: if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_WRAPPER_STYLE)) { aoqi@0: parseWrapperStyle(context, jaxwsBinding, e2); aoqi@0: } else if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ASYNC_MAPPING)) { aoqi@0: parseAsynMapping(context, jaxwsBinding, e2); aoqi@0: } else if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.CLASS)) { aoqi@0: parseClass(context, jaxwsBinding, e2); aoqi@0: if ((jaxwsBinding.getClassName() != null) && (jaxwsBinding.getClassName().getJavaDoc() != null) && (parent instanceof PortType)) { aoqi@0: ((PortType) parent).setDocumentation(new Documentation(jaxwsBinding.getClassName().getJavaDoc())); aoqi@0: } aoqi@0: } else { aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e2.getTagName(), aoqi@0: e2.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: parent.addExtension(jaxwsBinding); aoqi@0: context.pop(); aoqi@0: // context.fireDoneParsingEntity( aoqi@0: // JAXWSBindingsConstants.JAXWS_BINDINGS, aoqi@0: // jaxwsBinding); aoqi@0: return true; aoqi@0: }else { aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e.getTagName(), aoqi@0: e.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public boolean handleOperationExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { aoqi@0: if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ aoqi@0: if(parent instanceof Operation){ aoqi@0: return handlePortTypeOperation(context, (Operation)parent, e); aoqi@0: }else if(parent instanceof BindingOperation){ aoqi@0: return handleBindingOperation(context, (BindingOperation)parent, e); aoqi@0: } aoqi@0: }else { aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e.getTagName(), aoqi@0: e.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: return false; aoqi@0: } aoqi@0: aoqi@0: private boolean handleBindingOperation(TWSDLParserContext context, BindingOperation operation, Element e) { aoqi@0: if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ aoqi@0: context.push(); aoqi@0: context.registerNamespaces(e); aoqi@0: JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); aoqi@0: aoqi@0: for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ aoqi@0: Element e2 = Util.nextElement(iter); aoqi@0: if (e2 == null) { aoqi@0: break; aoqi@0: } aoqi@0: aoqi@0: // if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ADDITIONAL_SOAPHEADER_MAPPING)){ aoqi@0: // parseAdditionalSOAPHeaderMapping(context, jaxwsBinding, e2); aoqi@0: // }else aoqi@0: if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_MIME_CONTENT)){ aoqi@0: parseMimeContent(context, jaxwsBinding, e2); aoqi@0: }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PARAMETER)){ aoqi@0: parseParameter(context, jaxwsBinding, e2); aoqi@0: }else{ aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e2.getTagName(), aoqi@0: e2.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: operation.addExtension(jaxwsBinding); aoqi@0: context.pop(); aoqi@0: // context.fireDoneParsingEntity( aoqi@0: // JAXWSBindingsConstants.JAXWS_BINDINGS, aoqi@0: // jaxwsBinding); aoqi@0: return true; aoqi@0: }else { aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e.getTagName(), aoqi@0: e.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: private boolean handlePortTypeOperation(TWSDLParserContext context, Operation parent, Element e) { aoqi@0: context.push(); aoqi@0: context.registerNamespaces(e); aoqi@0: JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); aoqi@0: aoqi@0: for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ aoqi@0: Element e2 = Util.nextElement(iter); aoqi@0: if (e2 == null) { aoqi@0: break; aoqi@0: } aoqi@0: aoqi@0: if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_WRAPPER_STYLE)){ aoqi@0: parseWrapperStyle(context, jaxwsBinding, e2); aoqi@0: }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ASYNC_MAPPING)){ aoqi@0: parseAsynMapping(context, jaxwsBinding, e2); aoqi@0: }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.METHOD)){ aoqi@0: parseMethod(context, jaxwsBinding, e2); aoqi@0: if((jaxwsBinding.getMethodName() != null) && (jaxwsBinding.getMethodName().getJavaDoc() != null)){ aoqi@0: parent.setDocumentation(new Documentation(jaxwsBinding.getMethodName().getJavaDoc())); aoqi@0: } aoqi@0: }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PARAMETER)){ aoqi@0: parseParameter(context, jaxwsBinding, e2); aoqi@0: }else{ aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e2.getTagName(), aoqi@0: e2.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: parent.addExtension(jaxwsBinding); aoqi@0: context.pop(); aoqi@0: // context.fireDoneParsingEntity( aoqi@0: // JAXWSBindingsConstants.JAXWS_BINDINGS, aoqi@0: // jaxwsBinding); aoqi@0: return true; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public boolean handleBindingExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { aoqi@0: if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ aoqi@0: context.push(); aoqi@0: context.registerNamespaces(e); aoqi@0: JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); aoqi@0: aoqi@0: for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ aoqi@0: Element e2 = Util.nextElement(iter); aoqi@0: if (e2 == null) { aoqi@0: break; aoqi@0: } aoqi@0: aoqi@0: // if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_ADDITIONAL_SOAPHEADER_MAPPING)){ aoqi@0: // parseAdditionalSOAPHeaderMapping(context, jaxwsBinding, e2); aoqi@0: // }else aoqi@0: if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.ENABLE_MIME_CONTENT)){ aoqi@0: parseMimeContent(context, jaxwsBinding, e2); aoqi@0: }else{ aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e2.getTagName(), aoqi@0: e2.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: parent.addExtension(jaxwsBinding); aoqi@0: context.pop(); aoqi@0: // context.fireDoneParsingEntity( aoqi@0: // JAXWSBindingsConstants.JAXWS_BINDINGS, aoqi@0: // jaxwsBinding); aoqi@0: return true; aoqi@0: }else { aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e.getTagName(), aoqi@0: e.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: /* (non-Javadoc) aoqi@0: * @see ExtensionHandlerBase#handleFaultExtension(TWSDLParserContextImpl, TWSDLExtensible, org.w3c.dom.Element) aoqi@0: */ aoqi@0: @Override aoqi@0: public boolean handleFaultExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { aoqi@0: if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ aoqi@0: context.push(); aoqi@0: context.registerNamespaces(e); aoqi@0: JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); aoqi@0: aoqi@0: for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ aoqi@0: Element e2 = Util.nextElement(iter); aoqi@0: if (e2 == null) { aoqi@0: break; aoqi@0: } aoqi@0: if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.CLASS)){ aoqi@0: parseClass(context, jaxwsBinding, e2); aoqi@0: if((jaxwsBinding.getClassName() != null) && (jaxwsBinding.getClassName().getJavaDoc() != null)){ aoqi@0: ((Fault)parent).setDocumentation(new Documentation(jaxwsBinding.getClassName().getJavaDoc())); aoqi@0: } aoqi@0: }else{ aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e2.getTagName(), aoqi@0: e2.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: parent.addExtension(jaxwsBinding); aoqi@0: context.pop(); aoqi@0: // context.fireDoneParsingEntity( aoqi@0: // JAXWSBindingsConstants.JAXWS_BINDINGS, aoqi@0: // jaxwsBinding); aoqi@0: return true; aoqi@0: }else { aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e.getTagName(), aoqi@0: e.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public boolean handleServiceExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { aoqi@0: if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ aoqi@0: context.push(); aoqi@0: context.registerNamespaces(e); aoqi@0: JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); aoqi@0: aoqi@0: for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ aoqi@0: Element e2 = Util.nextElement(iter); aoqi@0: if (e2 == null) { aoqi@0: break; aoqi@0: } aoqi@0: if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.CLASS)){ aoqi@0: parseClass(context, jaxwsBinding, e2); aoqi@0: if((jaxwsBinding.getClassName() != null) && (jaxwsBinding.getClassName().getJavaDoc() != null)){ aoqi@0: ((Service)parent).setDocumentation(new Documentation(jaxwsBinding.getClassName().getJavaDoc())); aoqi@0: } aoqi@0: }else{ aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e2.getTagName(), aoqi@0: e2.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: parent.addExtension(jaxwsBinding); aoqi@0: context.pop(); aoqi@0: // context.fireDoneParsingEntity( aoqi@0: // JAXWSBindingsConstants.JAXWS_BINDINGS, aoqi@0: // jaxwsBinding); aoqi@0: return true; aoqi@0: }else { aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e.getTagName(), aoqi@0: e.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public boolean handlePortExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { aoqi@0: if(XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)){ aoqi@0: context.push(); aoqi@0: context.registerNamespaces(e); aoqi@0: JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e)); aoqi@0: aoqi@0: for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ aoqi@0: Element e2 = Util.nextElement(iter); aoqi@0: if (e2 == null) { aoqi@0: break; aoqi@0: } aoqi@0: aoqi@0: if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.PROVIDER)){ aoqi@0: parseProvider(context, jaxwsBinding, e2); aoqi@0: }else if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.METHOD)){ aoqi@0: parseMethod(context, jaxwsBinding, e2); aoqi@0: if((jaxwsBinding.getMethodName() != null) && (jaxwsBinding.getMethodName().getJavaDoc() != null)){ aoqi@0: ((Port)parent).setDocumentation(new Documentation(jaxwsBinding.getMethodName().getJavaDoc())); aoqi@0: } aoqi@0: }else{ aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e2.getTagName(), aoqi@0: e2.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: parent.addExtension(jaxwsBinding); aoqi@0: context.pop(); aoqi@0: // context.fireDoneParsingEntity( aoqi@0: // JAXWSBindingsConstants.JAXWS_BINDINGS, aoqi@0: // jaxwsBinding); aoqi@0: return true; aoqi@0: }else { aoqi@0: Util.fail( aoqi@0: "parsing.invalidExtensionElement", aoqi@0: e.getTagName(), aoqi@0: e.getNamespaceURI()); aoqi@0: return false; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: private String getJavaDoc(Element e){ aoqi@0: for(Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext();){ aoqi@0: Element e2 = Util.nextElement(iter); aoqi@0: if (e2 == null) { aoqi@0: break; aoqi@0: } aoqi@0: if(XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.JAVADOC)){ aoqi@0: return XmlUtil.getTextForNode(e2); aoqi@0: } aoqi@0: } aoqi@0: return null; aoqi@0: } aoqi@0: }