blob: ea4b326f52bee4417eaef820bd367368c920c278 [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.axiom.soap.impl.factory;
import javax.xml.namespace.QName;
import org.apache.axiom.core.NodeFactory;
import org.apache.axiom.om.OMDataSource;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMMetaFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.impl.common.factory.OMFactoryImpl;
import org.apache.axiom.om.impl.intf.AxiomElement;
import org.apache.axiom.om.impl.intf.Sequence;
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPConstants;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.SOAPFault;
import org.apache.axiom.soap.SOAPFaultCode;
import org.apache.axiom.soap.SOAPFaultDetail;
import org.apache.axiom.soap.SOAPFaultReason;
import org.apache.axiom.soap.SOAPFaultRole;
import org.apache.axiom.soap.SOAPHeader;
import org.apache.axiom.soap.SOAPHeaderBlock;
import org.apache.axiom.soap.SOAPMessage;
import org.apache.axiom.soap.SOAPVersion;
import org.apache.axiom.soap.impl.intf.AxiomSOAPElement;
import org.apache.axiom.soap.impl.intf.AxiomSOAPHeaderBlock;
import org.apache.axiom.soap.impl.intf.AxiomSOAPMessage;
import org.apache.axiom.soap.impl.intf.SOAPHelper;
public abstract class SOAPFactoryImpl extends OMFactoryImpl implements SOAPFactory {
private static final Sequence envelopeSequence = new Sequence(SOAPHeader.class, SOAPBody.class);
public SOAPFactoryImpl(OMMetaFactory metaFactory, NodeFactory nodeFactory) {
super(metaFactory, nodeFactory);
}
public abstract SOAPHelper getSOAPHelper();
@Override
public final String getSoapVersionURI() {
return getSOAPHelper().getEnvelopeURI();
}
@Override
public final SOAPVersion getSOAPVersion() {
return getSOAPHelper().getVersion();
}
@Override
public final OMNamespace getNamespace() {
return getSOAPHelper().getNamespace();
}
protected final <T extends AxiomSOAPElement> T createSOAPElement(Class<T> type, OMElement parent, QName qname) {
return createSOAPElement(type, parent, qname, null, -1);
}
protected final <T extends AxiomSOAPElement> T createSOAPElement(Class<T> type, OMElement parent, QName qname, Sequence sequence, int pos) {
T element = createNode(type);
if (parent != null) {
if (sequence != null) {
((AxiomElement)parent).insertChild(sequence, pos, element, false);
} else {
((AxiomElement)parent).addChild(element);
}
}
if (qname.getNamespaceURI().length() == 0) {
element.initName(qname.getLocalPart(), null, true);
} else if (parent != null) {
element.initName(qname.getLocalPart(), parent.getNamespace(), false);
} else {
element.initName(qname.getLocalPart(), getNamespace(), true);
}
return element;
}
@Override
public final SOAPMessage createSOAPMessage() {
AxiomSOAPMessage message = createNode(AxiomSOAPMessage.class);
message.initSOAPFactory(this);
return message;
}
@Override
public final SOAPEnvelope createSOAPEnvelope() {
return createSOAPEnvelope(getNamespace());
}
@Override
public final SOAPEnvelope createSOAPEnvelope(OMNamespace ns) {
return createAxiomElement(getSOAPHelper().getEnvelopeClass(), null, SOAPConstants.SOAPENVELOPE_LOCAL_NAME, ns);
}
@Override
public final SOAPHeader createSOAPHeader(SOAPEnvelope parent) {
SOAPHelper helper = getSOAPHelper();
return createSOAPElement(helper.getHeaderClass(), parent, helper.getHeaderQName(), envelopeSequence, 0);
}
@Override
public final SOAPHeader createSOAPHeader() {
return createSOAPHeader(null);
}
@Override
public final SOAPHeaderBlock createSOAPHeaderBlock(String localName, OMNamespace ns, SOAPHeader parent) {
return createAxiomElement(getSOAPHelper().getHeaderBlockClass(), parent, localName, ns);
}
@Override
public final SOAPHeaderBlock createSOAPHeaderBlock(String localName, OMNamespace ns) {
return createAxiomElement(getSOAPHelper().getHeaderBlockClass(), null, localName, ns);
}
@Override
public final SOAPHeaderBlock createSOAPHeaderBlock(OMDataSource source) {
AxiomSOAPHeaderBlock element = createNode(getSOAPHelper().getHeaderBlockClass());
element.init(source);
return element;
}
@Override
public final SOAPHeaderBlock createSOAPHeaderBlock(String localName, OMNamespace ns, OMDataSource ds) {
AxiomSOAPHeaderBlock element = createNode(getSOAPHelper().getHeaderBlockClass());
element.init(localName, ns, ds);
return element;
}
@Override
public final SOAPHeaderBlock createSOAPHeaderBlock(OMElement element) {
return importElement(element, getSOAPHelper().getHeaderBlockClass());
}
@Override
public final SOAPBody createSOAPBody(SOAPEnvelope parent) {
SOAPHelper helper = getSOAPHelper();
return createSOAPElement(helper.getBodyClass(), parent, helper.getBodyQName(), envelopeSequence, 1);
}
@Override
public final SOAPBody createSOAPBody() {
return createSOAPBody(null);
}
@Override
public final SOAPFault createSOAPFault(SOAPBody parent) {
SOAPHelper helper = getSOAPHelper();
return createSOAPElement(helper.getFaultClass(), parent, helper.getFaultQName());
}
@Override
public final SOAPFault createSOAPFault() {
return createSOAPFault(null);
}
@Override
public final SOAPFault createSOAPFault(SOAPBody parent, Exception e) {
SOAPFault fault = createSOAPFault(parent);
fault.setException(e);
return fault;
}
@Override
public final SOAPFaultCode createSOAPFaultCode(SOAPFault parent) {
SOAPHelper helper = getSOAPHelper();
return createSOAPElement(helper.getFaultCodeClass(), parent, helper.getFaultCodeQName());
}
@Override
public final SOAPFaultCode createSOAPFaultCode() {
return createSOAPFaultCode(null);
}
@Override
public final SOAPFaultReason createSOAPFaultReason(SOAPFault parent) {
SOAPHelper helper = getSOAPHelper();
return createSOAPElement(helper.getFaultReasonClass(), parent, helper.getFaultReasonQName());
}
@Override
public final SOAPFaultReason createSOAPFaultReason() {
return createSOAPFaultReason(null);
}
@Override
public final SOAPFaultRole createSOAPFaultRole(SOAPFault parent) {
SOAPHelper helper = getSOAPHelper();
return createSOAPElement(helper.getFaultRoleClass(), parent, helper.getFaultRoleQName());
}
@Override
public final SOAPFaultRole createSOAPFaultRole() {
return createSOAPFaultRole(null);
}
@Override
public final SOAPFaultDetail createSOAPFaultDetail(SOAPFault parent) {
SOAPHelper helper = getSOAPHelper();
return createSOAPElement(helper.getFaultDetailClass(), parent, helper.getFaultDetailQName());
}
@Override
public final SOAPFaultDetail createSOAPFaultDetail() {
return createSOAPFaultDetail(null);
}
@Override
public final SOAPMessage createDefaultSOAPMessage() {
SOAPMessage message = createSOAPMessage();
SOAPEnvelope env = createSOAPEnvelope();
message.addChild(env);
createSOAPBody(env);
return message;
}
@Override
public final SOAPEnvelope getDefaultEnvelope() {
SOAPEnvelope env = createSOAPEnvelope();
createSOAPHeader(env);
createSOAPBody(env);
return env;
}
}