/* * 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.synapse.config.xml.endpoints; import org.apache.axiom.om.OMAttribute; import org.apache.axiom.om.OMElement; import org.apache.synapse.SynapseConstants; import org.apache.synapse.aspects.AspectConfiguration; import org.apache.synapse.config.xml.XMLConfigConstants; import org.apache.synapse.endpoints.DefaultEndpoint; import org.apache.synapse.endpoints.Endpoint; import org.apache.synapse.endpoints.EndpointDefinition; import javax.xml.namespace.QName; import java.util.Properties; /** * Creates {@link DefaultEndpoint} using a XML configuration. * <p/> * Configuration syntax: * <pre> * <endpoint [name="<em>name</em>"]> * <default [format="soap11|soap12|pox|get"] [optimize="mtom|swa"] * [encoding="<em>charset encoding</em>"] * [statistics="enable|disable"] [trace="enable|disable"]> * .. extensibility .. * * <enableSec [policy="<em>key</em>"]/>? * <enableAddressing [version="final|submission"] [separateListener="true|false"]/>? * * <timeout> * <duration><em>timeout duration in seconds</em></duration> * <responseAction>discard|fault</responseAction> * </timeout>? * * <suspendDurationOnFailure> * <em>suspend duration in seconds</em> * </suspendDurationOnFailure>? * </address> * </endpoint> * </pre> */ public class DefaultEndpointFactory extends EndpointFactory { private static DefaultEndpointFactory instance = new DefaultEndpointFactory(); protected DefaultEndpointFactory() { } public static DefaultEndpointFactory getInstance() { return instance; } protected Endpoint createEndpoint(OMElement epConfig, boolean anonymousEndpoint, Properties properties) { DefaultEndpoint defaultEndpoint = new DefaultEndpoint(); OMAttribute name = epConfig.getAttribute( new QName(XMLConfigConstants.NULL_NAMESPACE, "name")); if (name != null) { defaultEndpoint.setName(name.getAttributeValue()); } OMElement defaultElement = epConfig.getFirstChildWithName( new QName(SynapseConstants.SYNAPSE_NAMESPACE, "default")); if (defaultElement != null) { EndpointDefinition endpoint = createEndpointDefinition(defaultElement); defaultEndpoint.setDefinition(endpoint); processAuditStatus(endpoint, defaultEndpoint.getName(),defaultElement); } processProperties(defaultEndpoint, epConfig); return defaultEndpoint; } @Override protected void extractSpecificEndpointProperties(EndpointDefinition definition, OMElement elem) { OMAttribute format = elem.getAttribute(new QName(XMLConfigConstants.NULL_NAMESPACE, "format")); if (format != null) { String forceValue = format.getAttributeValue().trim().toLowerCase(); if (SynapseConstants.FORMAT_POX.equals(forceValue)) { definition.setForcePOX(true); definition.setFormat(SynapseConstants.FORMAT_POX); } else if (SynapseConstants.FORMAT_GET.equals(forceValue)) { definition.setForceGET(true); definition.setFormat(SynapseConstants.FORMAT_GET); } else if (SynapseConstants.FORMAT_SOAP11.equals(forceValue)) { definition.setForceSOAP11(true); definition.setFormat(SynapseConstants.FORMAT_SOAP11); } else if (SynapseConstants.FORMAT_SOAP12.equals(forceValue)) { definition.setForceSOAP12(true); definition.setFormat(SynapseConstants.FORMAT_SOAP12); } else if (SynapseConstants.FORMAT_REST.equals(forceValue)) { definition.setForceREST(true); definition.setFormat(SynapseConstants.FORMAT_REST); } /*else if(!TemplateMappingsPopulator.populateMapping(definition, EndpointDefinition.EndpointDefKey.format, forceValue)) { handleException("force value -\"" + forceValue + "\" not yet implemented"); }*/ } } /** * Creates an EndpointDefinition instance using the XML fragment specification. Configuration * for EndpointDefinition always resides inside a configuration of an AddressEndpoint. This * factory extracts the details related to the EPR provided for address endpoint. * * @param elem XML configuration element * @return EndpointDefinition object containing the endpoint details. */ public EndpointDefinition createEndpointDefinition(OMElement elem) { DefinitionFactory fac = getEndpointDefinitionFactory(); EndpointDefinition endpointDefinition; if (fac == null) { fac = new EndpointDefinitionFactory(); endpointDefinition = fac.createDefinition(elem); } else{ endpointDefinition = fac.createDefinition(elem); } extractSpecificEndpointProperties(endpointDefinition, elem); return endpointDefinition; } protected void processAuditStatus(EndpointDefinition definition ,String name , OMElement epOmElement){ if (name == null || "".equals(name)) { name = SynapseConstants.ANONYMOUS_ENDPOINT; } AspectConfiguration aspectConfiguration = new AspectConfiguration(name); definition.configure(aspectConfiguration); OMAttribute statistics = epOmElement.getAttribute( new QName(XMLConfigConstants.STATISTICS_ATTRIB_NAME)); if (statistics != null) { String statisticsValue = statistics.getAttributeValue(); if (statisticsValue != null) { if (XMLConfigConstants.STATISTICS_ENABLE.equals(statisticsValue)) { aspectConfiguration.enableStatistics(); } } } OMAttribute tracing = epOmElement.getAttribute( new QName(XMLConfigConstants.TRACE_ATTRIB_NAME)); if (tracing != null) { String tracingValue = tracing.getAttributeValue(); if (tracingValue != null) { if (XMLConfigConstants.TRACE_ENABLE.equals(tracingValue)) { aspectConfiguration.enableTracing(); } } } } }