blob: b3abc5b74328572cd8e09da3d7c985f49b6587a1 [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.synapse.config.xml;
import org.apache.axiom.om.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.SynapseException;
import org.apache.synapse.SynapseConstants;
import org.apache.synapse.aspects.statistics.StatisticsConfigurable;
import org.apache.synapse.config.xml.endpoints.EndpointSerializer;
import org.apache.synapse.core.axis2.ProxyService;
import org.apache.synapse.endpoints.Endpoint;
import org.apache.synapse.mediators.base.SequenceMediator;
import org.apache.synapse.util.PolicyInfo;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
/**
* Serializer for {@link ProxyService} instances.
*
* @see ProxyServiceFactory
*/
public class ProxyServiceSerializer {
private static final Log log = LogFactory.getLog(PropertyMediatorSerializer.class);
protected static final OMFactory fac = OMAbstractFactory.getOMFactory();
protected static final OMNamespace synNS = SynapseConstants.SYNAPSE_OMNAMESPACE;
protected static final OMNamespace nullNS = fac.createOMNamespace(XMLConfigConstants.NULL_NAMESPACE, "");
public static OMElement serializeProxy(OMElement parent, ProxyService service) {
OMElement proxy = fac.createOMElement("proxy", synNS);
if (service.getName() != null) {
proxy.addAttribute(fac.createOMAttribute(
"name", nullNS, service.getName()));
} else {
handleException("Invalid proxy service. Service name is required");
}
String descriptionStr = service.getDescription();
if (descriptionStr != null) {
OMElement description = fac.createOMElement("description", synNS);
description.addChild(fac.createOMText(descriptionStr));
proxy.addChild(description);
}
ArrayList transports = service.getTransports();
if (transports != null && !transports.isEmpty()) {
String transportStr = "" + transports.get(0);
for (int i = 1; i < transports.size(); i++) {
transportStr = transportStr.concat(" " + transports.get(i));
}
proxy.addAttribute(fac.createOMAttribute("transports", nullNS, transportStr));
}
if (service.getServiceGroup() != null) {
proxy.addAttribute(fac.createOMAttribute(
"serviceGroup", nullNS, service.getServiceGroup()));
}
List pinnedServers = service.getPinnedServers();
if (pinnedServers != null && !pinnedServers.isEmpty()) {
String pinnedServersStr = "" + pinnedServers.get(0);
for (int i = 1; i < pinnedServers.size(); i++) {
pinnedServersStr = pinnedServersStr.concat(" " + pinnedServers.get(i));
}
proxy.addAttribute(fac.createOMAttribute("pinnedServers", nullNS, pinnedServersStr));
}
if (service.isStartOnLoad()) {
proxy.addAttribute(fac.createOMAttribute(
"startOnLoad", nullNS, "true"));
} else {
proxy.addAttribute(fac.createOMAttribute(
"startOnLoad", nullNS, "false"));
}
String endpoint = service.getTargetEndpoint();
OMElement target = fac.createOMElement("target", synNS);
Endpoint inLineEndpoint = service.getTargetInLineEndpoint();
if (endpoint != null) {
target.addAttribute(fac.createOMAttribute(
"endpoint", nullNS, endpoint));
proxy.addChild(target);
} else if (inLineEndpoint != null) {
OMElement epElement = EndpointSerializer.getElementFromEndpoint(inLineEndpoint);
target.addChild(epElement);
proxy.addChild(target);
}
String inSeq = service.getTargetInSequence();
String outSeq = service.getTargetOutSequence();
String faultSeq = service.getTargetFaultSequence();
SequenceMediatorSerializer serializer = new SequenceMediatorSerializer();
if (inSeq != null) {
target.addAttribute(fac.createOMAttribute("inSequence", nullNS, inSeq));
proxy.addChild(target);
} else {
SequenceMediator inLineInSeq = service.getTargetInLineInSequence();
if (inLineInSeq != null) {
OMElement inSeqElement = serializer.serializeAnonymousSequence(null, inLineInSeq);
inSeqElement.setLocalName("inSequence");
target.addChild(inSeqElement);
proxy.addChild(target);
}
}
if (outSeq != null) {
target.addAttribute(fac.createOMAttribute("outSequence", nullNS, outSeq));
proxy.addChild(target);
} else {
SequenceMediator inLineOutSeq = service.getTargetInLineOutSequence();
if (inLineOutSeq != null) {
OMElement outSeqElement = serializer.serializeAnonymousSequence(null, inLineOutSeq);
outSeqElement.setLocalName("outSequence");
target.addChild(outSeqElement);
proxy.addChild(target);
}
}
if (faultSeq != null) {
target.addAttribute(fac.createOMAttribute("faultSequence", nullNS, faultSeq));
proxy.addChild(target);
} else {
SequenceMediator inLineFaultSeq = service.getTargetInLineFaultSequence();
if (inLineFaultSeq != null) {
OMElement faultSeqElement = serializer.serializeAnonymousSequence(null, inLineFaultSeq);
faultSeqElement.setLocalName("faultSequence");
target.addChild(faultSeqElement);
proxy.addChild(target);
}
}
String wsdlKey = service.getWSDLKey();
URI wsdlUri = service.getWsdlURI();
Object inLineWSDL = service.getInLineWSDL();
if (wsdlKey != null || wsdlUri != null || inLineWSDL != null) {
OMElement wsdl = fac.createOMElement("publishWSDL", synNS);
if (wsdlKey != null) {
wsdl.addAttribute(fac.createOMAttribute(
"key", nullNS, wsdlKey));
} else if (inLineWSDL != null) {
wsdl.addChild((OMNode) inLineWSDL);
} else if (wsdlUri != null) {
wsdl.addAttribute(fac.createOMAttribute(
"uri", nullNS, wsdlUri.toString()));
}
ResourceMapSerializer.serializeResourceMap(wsdl, service.getResourceMap());
proxy.addChild(wsdl);
}
for (PolicyInfo pi : service.getPolicies()) {
OMElement policy = fac.createOMElement("policy", synNS);
if (pi.getPolicyKey() != null) {
policy.addAttribute(fac.createOMAttribute("key", nullNS, pi.getPolicyKey()));
} else {
handleException("Policy without a key has been found");
}
if (pi.getOperation() != null) {
policy.addAttribute(fac.createOMAttribute("operationName", nullNS, pi.getOperation().getLocalPart()));
if (pi.getOperation().getNamespaceURI() != null) {
policy.addAttribute(fac.createOMAttribute(
"operationNamespace", nullNS, pi.getOperation().getNamespaceURI()));
}
}
if (pi.getType() != 0) {
policy.addAttribute(fac.createOMAttribute("type", nullNS, pi.getMessageLable().toLowerCase()));
}
proxy.addChild(policy);
}
for (String propertyName : service.getParameterMap().keySet()) {
OMElement property = fac.createOMElement("parameter", synNS);
property.addAttribute(fac.createOMAttribute(
"name", nullNS, propertyName));
Object value = service.getParameterMap().get(propertyName);
if (value != null) {
if (value instanceof String) {
property.setText(((String) value).trim());
proxy.addChild(property);
} else if (value instanceof OMNode) {
property.addChild((OMNode) value);
proxy.addChild(property);
}
}
}
if (service.isWsAddrEnabled()) {
proxy.addChild(fac.createOMElement("enableAddressing", synNS));
}
if (service.isWsSecEnabled()) {
proxy.addChild(fac.createOMElement("enableSec", synNS));
}
int traceState = service.getTraceState();
String traceValue = null;
if (traceState == org.apache.synapse.SynapseConstants.TRACING_ON) {
traceValue = XMLConfigConstants.TRACE_ENABLE;
} else if (traceState == org.apache.synapse.SynapseConstants.TRACING_OFF) {
traceValue = XMLConfigConstants.TRACE_DISABLE;
}
if (traceValue != null) {
proxy.addAttribute(fac.createOMAttribute(
XMLConfigConstants.TRACE_ATTRIB_NAME, nullNS, traceValue));
}
StatisticsConfigurable statisticsConfigurable =
service.getAspectConfiguration();
if (statisticsConfigurable != null && statisticsConfigurable.isStatisticsEnable()) {
proxy.addAttribute(fac.createOMAttribute(
XMLConfigConstants.STATISTICS_ATTRIB_NAME, nullNS,
XMLConfigConstants.STATISTICS_ENABLE));
}
if (parent != null) {
parent.addChild(proxy);
}
return proxy;
}
private static void handleException(String msg) {
log.error(msg);
throw new SynapseException(msg);
}
}