/*
* #%L
* Wildfly Camel :: Testsuite
* %%
* Copyright (C) 2013 - 2017 RedHat
* %%
* Licensed 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.
* #L%
*/
package org.wildfly.camel.test.cxf.ws;
import java.net.URL;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.cxf.CxfComponent;
import org.apache.camel.component.cxf.CxfEndpoint;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.wildfly.camel.test.common.types.Endpoint;
import org.wildfly.extension.camel.CamelAware;
@CamelAware
@RunWith(Arquillian.class)
public class CXFWSInterceptorTest {
@Deployment
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class, "camel-cxfws-interceptor-tests.jar")
.addClass(Endpoint.class);
}
@Test
public void testCXFInterceptor() throws Exception {
CountDownLatch latch = new CountDownLatch(1);
DefaultCamelContext camelctx = new DefaultCamelContext();
CxfComponent component = new CxfComponent(camelctx);
CxfEndpoint cxfEndpoint = new CxfEndpoint("http://localhost:8080/EndpointService/EndpointPort", component);
cxfEndpoint.setServiceClass(Endpoint.class);
List<Interceptor<? extends Message>> inInterceptors = cxfEndpoint.getInInterceptors();
inInterceptors.add(new CountDownInterceptor(latch));
camelctx.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from(cxfEndpoint)
.setBody(constant("Hello ${body}"));
}
});
camelctx.start();
try {
QName qname = new QName("http://wildfly.camel.test.cxf", "EndpointService");
Service service = Service.create(new URL("http://localhost:8080/EndpointService/EndpointPort?wsdl"), qname);
Endpoint endpoint = service.getPort(Endpoint.class);
endpoint.echo("Kermit");
Assert.assertTrue("Gave up waiting for CXF interceptor handleMessage", latch.await(5, TimeUnit.SECONDS));
} finally {
camelctx.stop();
}
}
private class CountDownInterceptor extends AbstractPhaseInterceptor {
private final CountDownLatch latch;
public CountDownInterceptor(CountDownLatch latch) {
super(Phase.RECEIVE);
this.latch = latch;
}
@Override
public void handleMessage(Message message) throws Fault {
this.latch.countDown();
}
}
}