/** * 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.cxf.ws.transfer.integration; import java.io.StringReader; import java.util.HashMap; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.stream.XMLStreamException; import javax.xml.ws.BindingProvider; import org.w3c.dom.Document; import org.apache.cxf.Bus; import org.apache.cxf.BusFactory; import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import org.apache.cxf.staxutils.StaxUtils; import org.apache.cxf.ws.addressing.AddressingProperties; import org.apache.cxf.ws.addressing.ContextUtils; import org.apache.cxf.ws.addressing.EndpointReferenceType; import org.apache.cxf.ws.addressing.JAXWSAConstants; import org.apache.cxf.ws.addressing.ReferenceParametersType; import org.apache.cxf.ws.transfer.Representation; import org.apache.cxf.ws.transfer.dialect.fragment.ExpressionType; import org.apache.cxf.ws.transfer.manager.ResourceManager; import org.apache.cxf.ws.transfer.resource.Resource; import org.apache.cxf.ws.transfer.resource.ResourceLocal; import org.apache.cxf.ws.transfer.resource.ResourceRemote; import org.apache.cxf.ws.transfer.resourcefactory.ResourceFactory; import org.apache.cxf.ws.transfer.resourcefactory.ResourceFactoryImpl; import org.apache.cxf.ws.transfer.resourcefactory.resolver.SimpleResourceResolver; import org.apache.cxf.ws.transfer.shared.TransferConstants; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; public class IntegrationBaseTest { public static final String RESOURCE_FACTORY_ADDRESS = "local://ResourceFactory"; public static final String RESOURCE_ADDRESS = "local://ResourceLocal"; public static final String RESOURCE_REMOTE_ADDRESS = "local://ResourceRemote"; public static final String RESOURCE_REMOTE_MANAGER_ADDRESS = "local://ResourceRemote" + TransferConstants.RESOURCE_REMOTE_SUFFIX; public static final String RESOURCE_LOCAL_ADDRESS = "local://ResourceLocal"; protected static DocumentBuilderFactory documentBuilderFactory; protected static DocumentBuilder documentBuilder; protected static Document document; protected Bus bus; @BeforeClass public static void beforeClass() throws ParserConfigurationException { documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilder = documentBuilderFactory.newDocumentBuilder(); document = documentBuilder.newDocument(); } @AfterClass public static void afterClass() { documentBuilderFactory = null; documentBuilder = null; document = null; } @Before public void before() { bus = BusFactory.getDefaultBus(); } @After public void after() { bus.shutdown(true); bus = null; } protected Server createLocalResourceFactory(ResourceManager manager) { ResourceFactoryImpl implementor = new ResourceFactoryImpl(); implementor.setResourceResolver(new SimpleResourceResolver(RESOURCE_ADDRESS, manager)); JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); factory.setBus(bus); factory.setServiceClass(ResourceFactory.class); factory.setAddress(RESOURCE_FACTORY_ADDRESS); factory.setServiceBean(implementor); return factory.create(); } protected Server createRemoteResourceFactory() { ResourceFactoryImpl implementor = new ResourceFactoryImpl(); implementor.setResourceResolver(new SimpleResourceResolver(RESOURCE_REMOTE_ADDRESS, null)); JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); factory.setBus(bus); factory.setServiceClass(ResourceFactory.class); factory.setAddress(RESOURCE_FACTORY_ADDRESS); factory.setServiceBean(implementor); return factory.create(); } protected Server createRemoteResource(ResourceManager manager) { ResourceRemote implementor = new ResourceRemote(); implementor.setManager(manager); JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); Map<String, Object> props = factory.getProperties(true); props.put("jaxb.additionalContextClasses", org.apache.cxf.ws.transfer.dialect.fragment.ExpressionType.class); factory.setProperties(props); factory.setBus(bus); factory.setServiceClass(ResourceFactory.class); factory.setAddress(RESOURCE_REMOTE_MANAGER_ADDRESS); factory.setServiceBean(implementor); return factory.create(); } protected Server createLocalResource(ResourceManager manager) { ResourceLocal implementor = new ResourceLocal(); implementor.setManager(manager); JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); Map<String, Object> props = factory.getProperties(true); props.put("jaxb.additionalContextClasses", org.apache.cxf.ws.transfer.dialect.fragment.ExpressionType.class); factory.setProperties(props); factory.setBus(bus); factory.setServiceClass(Resource.class); factory.setAddress(RESOURCE_LOCAL_ADDRESS); factory.setServiceBean(implementor); return factory.create(); } protected Representation getRepresentation(String content) throws XMLStreamException { Document doc = null; doc = StaxUtils.read(new StringReader(content)); Representation representation = new Representation(); representation.setAny(doc.getDocumentElement()); return representation; } protected Resource createClient(ReferenceParametersType refParams) { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); Map<String, Object> props = factory.getProperties(); if (props == null) { props = new HashMap<>(); } props.put("jaxb.additionalContextClasses", ExpressionType.class); factory.setProperties(props); factory.setBus(bus); factory.setServiceClass(Resource.class); factory.setAddress(RESOURCE_ADDRESS); Resource proxy = (Resource) factory.create(); // Add reference parameters AddressingProperties addrProps = new AddressingProperties(); EndpointReferenceType endpoint = new EndpointReferenceType(); endpoint.setReferenceParameters(refParams); endpoint.setAddress(ContextUtils.getAttributedURI(RESOURCE_ADDRESS)); addrProps.setTo(endpoint); ((BindingProvider) proxy).getRequestContext().put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, addrProps); return proxy; } }