/* * 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.axis2.mex.om; import org.apache.axiom.om.OMAttribute; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.om.OMNode; import org.apache.axiom.soap.SOAP12Constants; import org.apache.axis2.mex.MexConstants; import org.apache.axis2.mex.MexException; import org.apache.axis2.mex.util.MexUtil; import javax.xml.namespace.QName; /** * Class implemented for MetadataSection element defined in * the WS-MEX spec. A unit of metdata i.e. a MetadataSection may be included in-line data, * or may be by reference as an endpoint reference (MetadataReference) or a URL (Location). * An instance of MetadataSection can have one form of data: inline, location, or reference. * */ public class MetadataSection extends MexOM implements IMexOM { private String namespaceValue = null; private OMFactory factory; // Choices of content: inline metadata, MetadataReference, Location private String anyAttribute = null; private OMNode inlineData = null; //private String inlineData = null; private Location location = null; private MetadataReference ref = null; // Attributes private String dialect; private String identifier; /** * Constructor * @throws MexException */ public MetadataSection() throws MexException { this.factory = MexUtil.getSOAPFactory(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);; this.namespaceValue = MexConstants.Spec_2004_09.NS_URI; } /** * Constructor * @param defaultFactory * @param namespaceValue * @throws MexOMException */ public MetadataSection(OMFactory defaultFactory, String namespaceValue) throws MexOMException { this.factory = defaultFactory; this.namespaceValue = namespaceValue; } /** * Populates an MetadataSection object based on the <code>OMElement</code> passed. * @param inElement mex:MetadataSection element * @return MetadataSection * @throws MexOMException */ public MetadataSection fromOM(OMElement element) throws MexOMException { if (element == null) { throw new MexOMException("Null element passed."); } if (!element.getLocalName().equals(MexConstants.SPEC.METADATA_SECTION)) { throw new MexOMException("Invalid element passed."); } OMAttribute dialectAttr = element.getAttribute(new QName(MexConstants.SPEC.DIALECT)); if (dialectAttr == null){ throw new MexOMException("Missing Dialect Attribute in MetadataSection."); } setDialect(dialectAttr.getAttributeValue()); OMAttribute identifierAttr = element.getAttribute(new QName(MexConstants.SPEC.IDENTIFIER)); if (identifierAttr != null){ setIdentifier(identifierAttr.getAttributeValue()); } // validate one of the following element must exist: Location, MetadataReference, inline data OMElement locationElem = element.getFirstChildWithName(new QName(namespaceValue, MexConstants.SPEC.LOCATION)); Location location = null; MetadataReference ref = null; if (locationElem != null){ location = new Location(factory, namespaceValue); setLocation(location.fromOM(locationElem)); } else { // check for MetadataReference OMElement refElem = element.getFirstChildWithName(new QName(namespaceValue, MexConstants.SPEC.METADATA_REFERENCE)); if (refElem != null ){ ref = new MetadataReference(factory, namespaceValue); setMetadataReference(ref.fromOM(refElem)); } } if (location == null && ref == null) { // check for inline content OMNode inline = element.getFirstOMChild(); if (inline != null) setinlineData(inline); else { throw new MexOMException("Invalid empty MetadataSection."); } } return this; } /** * Convert MetadatSection content to the OMElement representation. * * @return OMElement representation of MetadataSection. * @throws MexOMException */ public OMElement toOM() throws MexOMException { OMNamespace mexNamespace = factory.createOMNamespace(namespaceValue, MexConstants.SPEC.NS_PREFIX); OMElement metadataSection = factory.createOMElement( MexConstants.SPEC.METADATA_SECTION, mexNamespace); // dialet is required if (dialect == null) { throw new MexOMException("Dialet was not set. Dialet must be set."); } OMAttribute dialetAttrib = factory.createOMAttribute( MexConstants.SPEC.DIALECT, null, dialect); metadataSection.addAttribute(dialetAttrib); if (identifier != null && identifier.trim().length() > 0) { OMAttribute identifierAttrib = factory.createOMAttribute( MexConstants.SPEC.IDENTIFIER, null, identifier); metadataSection.addAttribute(identifierAttrib); } if (anyAttribute != null) { OMAttribute anyAttrib = factory.createOMAttribute("AnyAttribute", null, anyAttribute); metadataSection.addAttribute(anyAttrib); } if (inlineData != null) { metadataSection.addChild(inlineData); } if (location != null) { metadataSection.addChild(location.toOM()); } if (ref != null) { metadataSection.addChild(ref.toOM()); } return metadataSection; } public String getDialect() { return dialect; } public String getIdentifier() { return identifier; } public String getanyAttribute() { return anyAttribute; } /** * Return metadata unit in URL form i.e. mex:Location * * @return */ public Location getLocation() { return location; } /** * Return metadata unit in inline form such as WSDL definitions, XML schema document, etc. * @return */ public OMNode getInlineData() { return inlineData; } /** * Return metadata unit in endpoint reference form i.e. mex:MetadataReference. * @return */ public MetadataReference getMetadataReference() { return ref; } public void setIdentifier(String in_identifier) { identifier =in_identifier; } public void setDialect(String in_dialect) { dialect = in_dialect; } public void setLocation(Location in_location) { location = in_location; } public void setinlineData(Object in_inlineData) { inlineData = (OMNode)in_inlineData; } public void setMetadataReference(MetadataReference in_ref) { ref = in_ref; } }