blob: b76919d9e055fbef08a8563fe8b76b9cbea4c46d [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.intf;
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMMetaFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.impl.common.OMNamespaceImpl;
import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axiom.soap.SOAPConstants;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.SOAPVersion;
import org.apache.axiom.soap.impl.intf.soap11.AxiomSOAP11Body;
import org.apache.axiom.soap.impl.intf.soap11.AxiomSOAP11Envelope;
import org.apache.axiom.soap.impl.intf.soap11.AxiomSOAP11Fault;
import org.apache.axiom.soap.impl.intf.soap11.AxiomSOAP11FaultCode;
import org.apache.axiom.soap.impl.intf.soap11.AxiomSOAP11FaultDetail;
import org.apache.axiom.soap.impl.intf.soap11.AxiomSOAP11FaultReason;
import org.apache.axiom.soap.impl.intf.soap11.AxiomSOAP11FaultRole;
import org.apache.axiom.soap.impl.intf.soap11.AxiomSOAP11Header;
import org.apache.axiom.soap.impl.intf.soap11.AxiomSOAP11HeaderBlock;
import org.apache.axiom.soap.impl.intf.soap12.AxiomSOAP12Body;
import org.apache.axiom.soap.impl.intf.soap12.AxiomSOAP12Envelope;
import org.apache.axiom.soap.impl.intf.soap12.AxiomSOAP12Fault;
import org.apache.axiom.soap.impl.intf.soap12.AxiomSOAP12FaultCode;
import org.apache.axiom.soap.impl.intf.soap12.AxiomSOAP12FaultDetail;
import org.apache.axiom.soap.impl.intf.soap12.AxiomSOAP12FaultReason;
import org.apache.axiom.soap.impl.intf.soap12.AxiomSOAP12FaultRole;
import org.apache.axiom.soap.impl.intf.soap12.AxiomSOAP12Header;
import org.apache.axiom.soap.impl.intf.soap12.AxiomSOAP12HeaderBlock;
/**
* Encapsulates certain SOAP version specific behaviors. This API defines methods that could also be
* added to {@link SOAPVersion}, but that are not relevant for application code and should therefore
* not be part of the public API.
*/
public abstract class SOAPHelper {
public static final SOAPHelper SOAP11 = new SOAPHelper(SOAPVersion.SOAP11, "SOAP 1.1",
AxiomSOAP11Envelope.class,
AxiomSOAP11Header.class,
AxiomSOAP11HeaderBlock.class,
AxiomSOAP11Body.class,
AxiomSOAP11Fault.class,
AxiomSOAP11FaultCode.class,
AxiomSOAP11FaultReason.class,
AxiomSOAP11FaultRole.class,
AxiomSOAP11FaultDetail.class,
SOAP11Constants.ATTR_ACTOR, null) {
@Override
public SOAPFactory getSOAPFactory(OMMetaFactory metaFactory) {
return metaFactory.getSOAP11Factory();
}
@Override
public Boolean parseBoolean(String literal) {
if (literal.equals("1")) {
return Boolean.TRUE;
} else if (literal.equals("0")) {
return Boolean.FALSE;
} else {
return null;
}
}
@Override
public String formatBoolean(boolean value) {
return value ? "1" : "0";
}
};
public static final SOAPHelper SOAP12 = new SOAPHelper(SOAPVersion.SOAP12, "SOAP 1.2",
AxiomSOAP12Envelope.class,
AxiomSOAP12Header.class,
AxiomSOAP12HeaderBlock.class,
AxiomSOAP12Body.class,
AxiomSOAP12Fault.class,
AxiomSOAP12FaultCode.class,
AxiomSOAP12FaultReason.class,
AxiomSOAP12FaultRole.class,
AxiomSOAP12FaultDetail.class,
SOAP12Constants.SOAP_ROLE, SOAP12Constants.SOAP_RELAY) {
@Override
public SOAPFactory getSOAPFactory(OMMetaFactory metaFactory) {
return metaFactory.getSOAP12Factory();
}
@Override
public Boolean parseBoolean(String literal) {
if (literal.equals("true") || literal.equals("1")) {
return Boolean.TRUE;
} else if (literal.equals("false") || literal.equals("0")) {
return Boolean.FALSE;
} else {
return null;
}
}
@Override
public String formatBoolean(boolean value) {
return String.valueOf(value);
}
};
private final SOAPVersion version;
private final OMNamespace namespace;
private final String specName;
private final Class<? extends AxiomSOAPEnvelope> envelopeClass;
private final Class<? extends AxiomSOAPHeader> headerClass;
private final QName headerQName;
private final Class<? extends AxiomSOAPHeaderBlock> headerBlockClass;
private final Class<? extends AxiomSOAPBody> bodyClass;
private final QName bodyQName;
private final Class<? extends AxiomSOAPFault> faultClass;
private final QName faultQName;
private final Class<? extends AxiomSOAPFaultCode> faultCodeClass;
private final Class<? extends AxiomSOAPFaultReason> faultReasonClass;
private final Class<? extends AxiomSOAPFaultRole> faultRoleClass;
private final Class<? extends AxiomSOAPFaultDetail> faultDetailClass;
private final QName mustUnderstandAttributeQName;
private final QName roleAttributeQName;
private final QName relayAttributeQName;
private SOAPHelper(SOAPVersion version, String specName,
Class<? extends AxiomSOAPEnvelope> envelopeClass,
Class<? extends AxiomSOAPHeader> headerClass,
Class<? extends AxiomSOAPHeaderBlock> headerBlockClass,
Class<? extends AxiomSOAPBody> bodyClass,
Class<? extends AxiomSOAPFault> faultClass,
Class<? extends AxiomSOAPFaultCode> faultCodeClass,
Class<? extends AxiomSOAPFaultReason> faultReasonClass,
Class<? extends AxiomSOAPFaultRole> faultRoleClass,
Class<? extends AxiomSOAPFaultDetail> faultDetailClass,
String roleAttributeLocalName, String relayAttributeLocalName) {
this.version = version;
namespace = new OMNamespaceImpl(version.getEnvelopeURI(),
SOAPConstants.SOAP_DEFAULT_NAMESPACE_PREFIX);
this.specName = specName;
this.envelopeClass = envelopeClass;
this.headerClass = headerClass;
headerQName = new QName(version.getEnvelopeURI(), SOAPConstants.HEADER_LOCAL_NAME,
SOAPConstants.SOAP_DEFAULT_NAMESPACE_PREFIX);
this.headerBlockClass = headerBlockClass;
this.bodyClass = bodyClass;
bodyQName = new QName(version.getEnvelopeURI(), SOAPConstants.BODY_LOCAL_NAME,
SOAPConstants.SOAP_DEFAULT_NAMESPACE_PREFIX);
this.faultClass = faultClass;
faultQName = new QName(version.getEnvelopeURI(), SOAPConstants.SOAPFAULT_LOCAL_NAME,
SOAPConstants.SOAP_DEFAULT_NAMESPACE_PREFIX);
this.faultCodeClass = faultCodeClass;
this.faultReasonClass = faultReasonClass;
this.faultRoleClass = faultRoleClass;
this.faultDetailClass = faultDetailClass;
mustUnderstandAttributeQName = new QName(
version.getEnvelopeURI(), SOAPConstants.ATTR_MUSTUNDERSTAND, SOAPConstants.SOAP_DEFAULT_NAMESPACE_PREFIX);
roleAttributeQName = new QName(
version.getEnvelopeURI(), roleAttributeLocalName, SOAPConstants.SOAP_DEFAULT_NAMESPACE_PREFIX);
relayAttributeQName = relayAttributeLocalName == null ? null :
new QName(version.getEnvelopeURI(), relayAttributeLocalName, SOAPConstants.SOAP_DEFAULT_NAMESPACE_PREFIX);
}
public final SOAPVersion getVersion() {
return version;
}
public abstract SOAPFactory getSOAPFactory(OMMetaFactory metaFactory);
public final String getEnvelopeURI() {
return version.getEnvelopeURI();
}
public final OMNamespace getNamespace() {
return namespace;
}
public final String getSpecName() {
return specName;
}
public final Class<? extends AxiomSOAPEnvelope> getEnvelopeClass() {
return envelopeClass;
}
public final Class<? extends AxiomSOAPHeader> getHeaderClass() {
return headerClass;
}
public final QName getHeaderQName() {
return headerQName;
}
public final Class<? extends AxiomSOAPHeaderBlock> getHeaderBlockClass() {
return headerBlockClass;
}
public final Class<? extends AxiomSOAPBody> getBodyClass() {
return bodyClass;
}
public final QName getBodyQName() {
return bodyQName;
}
public final Class<? extends AxiomSOAPFault> getFaultClass() {
return faultClass;
}
public final QName getFaultQName() {
return faultQName;
}
public final Class<? extends AxiomSOAPFaultCode> getFaultCodeClass() {
return faultCodeClass;
}
public final QName getFaultCodeQName() {
return version.getFaultCodeQName();
}
public final Class<? extends AxiomSOAPFaultReason> getFaultReasonClass() {
return faultReasonClass;
}
public final QName getFaultReasonQName() {
return version.getFaultReasonQName();
}
public final Class<? extends AxiomSOAPFaultRole> getFaultRoleClass() {
return faultRoleClass;
}
public final QName getFaultRoleQName() {
return version.getFaultRoleQName();
}
public final Class<? extends AxiomSOAPFaultDetail> getFaultDetailClass() {
return faultDetailClass;
}
public final QName getFaultDetailQName() {
return version.getFaultDetailQName();
}
public final QName getMustUnderstandAttributeQName() {
return mustUnderstandAttributeQName;
}
public final QName getRoleAttributeQName() {
return roleAttributeQName;
}
public final QName getRelayAttributeQName() {
return relayAttributeQName;
}
public abstract Boolean parseBoolean(String literal);
public abstract String formatBoolean(boolean value);
}