/* * 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.mediators.elementary; import junit.framework.TestCase; import org.apache.synapse.MessageContext; import org.apache.synapse.mediators.TestUtils; import org.apache.synapse.mediators.transform.PayloadFactoryMediator; import java.util.ArrayList; public class EnrichMediatorTest extends TestCase { public void testEnrichingEnvelopeUsingClonedProperty() throws Exception { String xml1 = "<p:echoInt xmlns:p=\"http://echo.services.core.carbon.wso2.org\">" + " <!--0 to 1 occurrence-->" + "<in>35</in>" + "</p:echoInt>"; String format = "<p:echoInt xmlns:p=\"http://echo.services.core.carbon.wso2.org\">" + "<in>1</in></p:echoInt>"; // name of the property String key = "envelope"; // create a message context from xml1 MessageContext msgCtxt1 = TestUtils.createLightweightSynapseMessageContext(xml1); // enrich the envelope to a property EnrichMediator enrichMediator1 = createEnvelopeToPropertyEnrichMediator(key, true); enrichMediator1.mediate(msgCtxt1); String expectedPropVal = "<?xml version='1.0' encoding='utf-8'?>" + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" + "<soapenv:Body>" + xml1 + "</soapenv:Body></soapenv:Envelope>"; // assert the property assertEquals(expectedPropVal, ((ArrayList) msgCtxt1.getProperty(key)).get(0).toString()); PayloadFactoryMediator payloadFacMediator = new PayloadFactoryMediator(); payloadFacMediator.setType("xml"); payloadFacMediator.setFormat(format); payloadFacMediator.mediate(msgCtxt1); String expectedPayload = "<soapenv:Body xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" + format + "</soapenv:Body>"; // assert the new payload assertEquals(expectedPayload, msgCtxt1.getEnvelope().getBody().toString()); // assert the property again - since the property was created using a // cloned message, it should not change assertEquals(expectedPropVal, ((ArrayList) msgCtxt1.getProperty(key)).get(0).toString()); } public void testEnrichingEnvelopeUsingUnclonedProperty() throws Exception { String xml1 = "<p:echoInt xmlns:p=\"http://echo.services.core.carbon.wso2.org\">" + " <!--0 to 1 occurrence-->" + "<in>35</in>" + "</p:echoInt>"; String format = "<p:echoInt xmlns:p=\"http://echo.services.core.carbon.wso2.org\">" + "<in>1</in></p:echoInt>"; // name of the property String key = "envelope"; // create a message context from xml1 MessageContext msgCtxt1 = TestUtils.createLightweightSynapseMessageContext(xml1); // enrich the envelope to a property EnrichMediator enrichMediator1 = createEnvelopeToPropertyEnrichMediator(key, false); enrichMediator1.mediate(msgCtxt1); String expectedPropVal = "<?xml version='1.0' encoding='utf-8'?>" + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" + "<soapenv:Body>" + xml1 + "</soapenv:Body></soapenv:Envelope>"; // assert the property assertEquals(expectedPropVal, ((ArrayList) msgCtxt1.getProperty(key)).get(0).toString()); PayloadFactoryMediator payloadFacMediator = new PayloadFactoryMediator(); payloadFacMediator.setType("xml"); payloadFacMediator.setFormat(format); payloadFacMediator.mediate(msgCtxt1); String expectedPayload = "<soapenv:Body xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" + format + "</soapenv:Body>"; // assert the new payload assertEquals(expectedPayload, msgCtxt1.getEnvelope().getBody().toString()); // expected property expectedPropVal = expectedPropVal.replaceFirst(xml1, format); // assert the property again - since the property was created using an // uncloned message, it should change assertEquals(expectedPropVal, ((ArrayList) msgCtxt1.getProperty(key)).get(0).toString()); } private EnrichMediator createEnvelopeToPropertyEnrichMediator(String propertyName, boolean clone) { // source to be used by enrich mediator Source source = new Source(); source.setClone(clone); source.setSourceType(EnrichMediator.ENVELOPE); // target that will be replaced by the enrich mediator Target target = new Target(); target.setTargetType(EnrichMediator.PROPERTY); target.setProperty(propertyName); // instantiate enrich mediator EnrichMediator enrich = new EnrichMediator(); enrich.setSource(source); enrich.setTarget(target); return enrich; } }