blob: 2976d4900d2da05371c42848bb266d5b443b2414 [file] [log] [blame]
/*
* 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;
}
}