http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/IntegrationBaseTest.java ---------------------------------------------------------------------- diff --git a/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/IntegrationBaseTest.java b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/IntegrationBaseTest.java new file mode 100644 index 0000000..2059a7a --- /dev/null +++ b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/IntegrationBaseTest.java @@ -0,0 +1,196 @@ +/** + * 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<String, Object>(); + } + 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; + } +}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/ResourceFactoryTest.java ---------------------------------------------------------------------- diff --git a/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/ResourceFactoryTest.java b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/ResourceFactoryTest.java new file mode 100644 index 0000000..85dabb0 --- /dev/null +++ b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/ResourceFactoryTest.java @@ -0,0 +1,135 @@ +/** + * 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 org.w3c.dom.Element; +import org.apache.cxf.endpoint.Server; +import org.apache.cxf.helpers.DOMUtils; +import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; +import org.apache.cxf.ws.addressing.ReferenceParametersType; +import org.apache.cxf.ws.transfer.Create; +import org.apache.cxf.ws.transfer.CreateResponse; +import org.apache.cxf.ws.transfer.Representation; +import org.apache.cxf.ws.transfer.manager.ResourceManager; +import org.apache.cxf.ws.transfer.resourcefactory.ResourceFactory; +import org.easymock.EasyMock; +import org.junit.Assert; +import org.junit.Test; + +public class ResourceFactoryTest extends IntegrationBaseTest { + + private static final String RESOURCE_UUID = "123456"; + + private static final String REF_PARAM_NAMESPACE = "org.apache.cxf.transfer/manager"; + + private static final String REF_PARAM_LOCAL_NAME = "UUID"; + + private ReferenceParametersType createReferenceParameters() { + ReferenceParametersType refParam = new ReferenceParametersType(); + Element uuidEl = DOMUtils.createDocument().createElementNS( + REF_PARAM_NAMESPACE, REF_PARAM_LOCAL_NAME); + uuidEl.setTextContent(RESOURCE_UUID); + refParam.getAny().add(uuidEl); + return refParam; + } + + private Element createXMLRepresentation() { + Element root = document.createElement("root"); + Element child1 = document.createElement("child1"); + Element child2 = document.createElement("child2"); + root.appendChild(child1); + root.appendChild(child2); + return root; + } + + private ResourceFactory createClient() { + JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); + factory.setBus(bus); + factory.setServiceClass(ResourceFactory.class); + factory.setAddress(RESOURCE_FACTORY_ADDRESS); + return (ResourceFactory) factory.create(); + } + + @Test + public void createLocalResourceTest() { + ReferenceParametersType refParams = createReferenceParameters(); + ResourceManager manager = EasyMock.createMock(ResourceManager.class); + EasyMock.expect(manager.create(EasyMock.isA(Representation.class))) + .andReturn(refParams); + EasyMock.expectLastCall().once(); + EasyMock.replay(manager); + + Server localResourceFactory = createLocalResourceFactory(manager); + ResourceFactory client = createClient(); + + Create createRequest = new Create(); + Representation representation = new Representation(); + representation.setAny(createXMLRepresentation()); + createRequest.setRepresentation(representation); + + CreateResponse response = client.create(createRequest); + EasyMock.verify(manager); + + Assert.assertEquals("ResourceAddress is other than expected.", RESOURCE_ADDRESS, + response.getResourceCreated().getAddress().getValue()); + Element refParamEl = (Element) response.getResourceCreated().getReferenceParameters().getAny().get(0); + Assert.assertEquals(REF_PARAM_NAMESPACE, refParamEl.getNamespaceURI()); + Assert.assertEquals(REF_PARAM_LOCAL_NAME, refParamEl.getLocalName()); + Assert.assertEquals(RESOURCE_UUID, refParamEl.getTextContent()); + Assert.assertEquals("root", ((Element) response.getRepresentation().getAny()).getLocalName()); + Assert.assertEquals(2, ((Element) response.getRepresentation().getAny()).getChildNodes().getLength()); + + localResourceFactory.destroy(); + } + + @Test + public void createRemoteResourceTest() { + ReferenceParametersType refParams = createReferenceParameters(); + ResourceManager manager = EasyMock.createMock(ResourceManager.class); + EasyMock.expect(manager.create(EasyMock.isA(Representation.class))) + .andReturn(refParams); + EasyMock.expectLastCall().once(); + EasyMock.replay(manager); + + Server remoteResourceFactory = createRemoteResourceFactory(); + Server remoteResource = createRemoteResource(manager); + ResourceFactory client = createClient(); + + Create createRequest = new Create(); + Representation representation = new Representation(); + representation.setAny(createXMLRepresentation()); + createRequest.setRepresentation(representation); + + CreateResponse response = client.create(createRequest); + EasyMock.verify(manager); + + Assert.assertEquals("ResourceAddress is other than expected.", RESOURCE_REMOTE_ADDRESS, + response.getResourceCreated().getAddress().getValue()); + Element refParamEl = (Element) response.getResourceCreated().getReferenceParameters().getAny().get(0); + Assert.assertEquals(REF_PARAM_NAMESPACE, refParamEl.getNamespaceURI()); + Assert.assertEquals(REF_PARAM_LOCAL_NAME, refParamEl.getLocalName()); + Assert.assertEquals(RESOURCE_UUID, refParamEl.getTextContent()); + Assert.assertEquals("root", ((Element) response.getRepresentation().getAny()).getLocalName()); + Assert.assertEquals(2, ((Element) response.getRepresentation().getAny()).getChildNodes().getLength()); + + remoteResourceFactory.destroy(); + remoteResource.destroy(); + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/ResourceTest.java ---------------------------------------------------------------------- diff --git a/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/ResourceTest.java b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/ResourceTest.java new file mode 100644 index 0000000..e2d4a3c --- /dev/null +++ b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/integration/ResourceTest.java @@ -0,0 +1,168 @@ +/** + * 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 javax.xml.ws.BindingProvider; +import org.w3c.dom.Element; +import org.apache.cxf.endpoint.Server; +import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; +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.Delete; +import org.apache.cxf.ws.transfer.Get; +import org.apache.cxf.ws.transfer.GetResponse; +import org.apache.cxf.ws.transfer.Put; +import org.apache.cxf.ws.transfer.PutResponse; +import org.apache.cxf.ws.transfer.Representation; +import org.apache.cxf.ws.transfer.manager.MemoryResourceManager; +import org.apache.cxf.ws.transfer.manager.ResourceManager; +import org.apache.cxf.ws.transfer.resource.Resource; +import org.easymock.EasyMock; +import org.junit.Assert; +import org.junit.Test; + +public class ResourceTest extends IntegrationBaseTest { + + private static final String UUID_VALUE = "123456"; + + private static final String REPRESENTATION_NAME = "name1"; + + private static final String REPRESENTATION_NAMESPACE = "test"; + + private static final String REPRESENTATION_VALUE = "value1"; + + protected Resource createClient(ReferenceParametersType refParams) { + JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); + factory.setBus(bus); + factory.setServiceClass(Resource.class); + factory.setAddress(RESOURCE_LOCAL_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; + } + + @Test + public void getRequestTest() { + Element representationEl = document.createElementNS(REPRESENTATION_NAMESPACE, REPRESENTATION_NAME); + representationEl.setTextContent(REPRESENTATION_VALUE); + Representation representation = new Representation(); + representation.setAny(representationEl); + + ResourceManager manager = EasyMock.createMock(ResourceManager.class); + EasyMock.expect(manager.get(EasyMock.isA(ReferenceParametersType.class))).andReturn(representation); + EasyMock.expectLastCall().once(); + EasyMock.replay(manager); + + ReferenceParametersType refParams = new ReferenceParametersType(); + Element uuid = document.createElementNS( + MemoryResourceManager.REF_NAMESPACE, MemoryResourceManager.REF_LOCAL_NAME); + uuid.setTextContent(UUID_VALUE); + refParams.getAny().add(uuid); + + Server server = createLocalResource(manager); + Resource client = createClient(refParams); + + GetResponse response = client.get(new Get()); + EasyMock.verify(manager); + + representationEl = (Element) response.getRepresentation().getAny(); + Assert.assertEquals("Namespace is other than expected.", + REPRESENTATION_NAMESPACE, representationEl.getNamespaceURI()); + Assert.assertEquals("Element name is other than expected", + REPRESENTATION_NAME, representationEl.getLocalName()); + Assert.assertEquals("Value is other than expected.", + REPRESENTATION_VALUE, representationEl.getTextContent()); + + server.destroy(); + } + + @Test + public void putRequestTest() { + ResourceManager manager = EasyMock.createMock(ResourceManager.class); + EasyMock.expect(manager.get(EasyMock.isA(ReferenceParametersType.class))).andReturn(new Representation()); + EasyMock.expectLastCall().once(); + manager.put(EasyMock.isA(ReferenceParametersType.class), EasyMock.isA(Representation.class)); + EasyMock.expectLastCall().once(); + EasyMock.replay(manager); + + ReferenceParametersType refParams = new ReferenceParametersType(); + Element uuid = document.createElementNS( + MemoryResourceManager.REF_NAMESPACE, MemoryResourceManager.REF_LOCAL_NAME); + uuid.setTextContent(UUID_VALUE); + refParams.getAny().add(uuid); + + Element representationEl = document.createElementNS(REPRESENTATION_NAMESPACE, REPRESENTATION_NAME); + representationEl.setTextContent(REPRESENTATION_VALUE); + Representation representation = new Representation(); + representation.setAny(representationEl); + + Server server = createLocalResource(manager); + Resource client = createClient(refParams); + + Put putRequest = new Put(); + putRequest.setRepresentation(representation); + + PutResponse response = client.put(putRequest); + EasyMock.verify(manager); + + representationEl = (Element) response.getRepresentation().getAny(); + Assert.assertEquals("Namespace is other than expected.", + REPRESENTATION_NAMESPACE, representationEl.getNamespaceURI()); + Assert.assertEquals("Element name is other than expected", + REPRESENTATION_NAME, representationEl.getLocalName()); + Assert.assertEquals("Value is other than expected.", + REPRESENTATION_VALUE, representationEl.getTextContent()); + + server.destroy(); + } + + @Test + public void deleteRequestTest() { + ResourceManager manager = EasyMock.createMock(ResourceManager.class); + manager.delete(EasyMock.isA(ReferenceParametersType.class)); + EasyMock.expectLastCall().once(); + EasyMock.replay(manager); + + ReferenceParametersType refParams = new ReferenceParametersType(); + Element uuid = document.createElementNS( + MemoryResourceManager.REF_NAMESPACE, MemoryResourceManager.REF_LOCAL_NAME); + uuid.setTextContent(UUID_VALUE); + refParams.getAny().add(uuid); + + Server server = createLocalResource(manager); + Resource client = createClient(refParams); + + client.delete(new Delete()); + EasyMock.verify(manager); + + server.destroy(); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/MemoryResourceManagerTest.java ---------------------------------------------------------------------- diff --git a/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/MemoryResourceManagerTest.java b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/MemoryResourceManagerTest.java new file mode 100644 index 0000000..f473339 --- /dev/null +++ b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/MemoryResourceManagerTest.java @@ -0,0 +1,204 @@ +/** + * 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.unit; + +import javax.xml.parsers.ParserConfigurationException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.apache.cxf.helpers.DOMUtils; +import org.apache.cxf.ws.addressing.ReferenceParametersType; +import org.apache.cxf.ws.transfer.Representation; +import org.apache.cxf.ws.transfer.manager.MemoryResourceManager; +import org.apache.cxf.ws.transfer.manager.ResourceManager; +import org.apache.cxf.ws.transfer.shared.faults.UnknownResource; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +public class MemoryResourceManagerTest { + + public static final String ELEMENT_NAMESPACE = "test"; + + public static final String ELEMENT_NAME = "name1"; + + public static final String ELEMENT_VALUE = "value1"; + + public static final String ELEMENT_VALUE_NEW = "value2"; + + private static Document document; + + private ResourceManager resourceManager; + + @BeforeClass + public static void beforeClass() throws ParserConfigurationException { + document = DOMUtils.createDocument(); + } + + @AfterClass + public static void afterClass() { + document = null; + } + + @Before + public void before() { + resourceManager = new MemoryResourceManager(); + } + + @After + public void after() { + resourceManager = null; + } + + @Test(expected = UnknownResource.class) + public void getEmptyReferenceParamsTest() { + resourceManager.get(new ReferenceParametersType()); + } + + @Test(expected = UnknownResource.class) + public void getUnknownReferenceParamsTest() { + ReferenceParametersType refParams = new ReferenceParametersType(); + Element uuid = DOMUtils.createDocument().createElementNS( + MemoryResourceManager.REF_NAMESPACE, MemoryResourceManager.REF_LOCAL_NAME); + uuid.setTextContent("123456"); + refParams.getAny().add(uuid); + resourceManager.get(refParams); + } + + @Test(expected = UnknownResource.class) + public void putEmptyReferenceParamsTest() { + resourceManager.put(new ReferenceParametersType(), new Representation()); + } + + @Test(expected = UnknownResource.class) + public void putUnknownReferenceParamsTest() { + ReferenceParametersType refParams = new ReferenceParametersType(); + Element uuid = DOMUtils.createDocument().createElementNS( + MemoryResourceManager.REF_NAMESPACE, MemoryResourceManager.REF_LOCAL_NAME); + uuid.setTextContent("123456"); + refParams.getAny().add(uuid); + resourceManager.put(refParams, new Representation()); + } + + @Test(expected = UnknownResource.class) + public void deleteEmptyReferenceParamsTest() { + resourceManager.delete(new ReferenceParametersType()); + } + + @Test(expected = UnknownResource.class) + public void deleteUnknownReferenceParamsTest() { + ReferenceParametersType refParams = new ReferenceParametersType(); + Element uuid = DOMUtils.createDocument().createElementNS( + MemoryResourceManager.REF_NAMESPACE, MemoryResourceManager.REF_LOCAL_NAME); + uuid.setTextContent("123456"); + refParams.getAny().add(uuid); + resourceManager.delete(refParams); + } + + @Test + public void createTest() { + Element representationEl = document.createElementNS(ELEMENT_NAMESPACE, ELEMENT_NAME); + representationEl.setTextContent(ELEMENT_VALUE); + Representation representation = new Representation(); + representation.setAny(representationEl); + + ReferenceParametersType refParams = resourceManager.create(representation); + Assert.assertTrue("ResourceManager returned unexpected count of reference elements.", + refParams.getAny().size() == 1); + } + + @Test + public void getTest() { + Element representationEl = document.createElementNS(ELEMENT_NAMESPACE, ELEMENT_NAME); + representationEl.setTextContent(ELEMENT_VALUE); + Representation representation = new Representation(); + representation.setAny(representationEl); + + ReferenceParametersType refParams = resourceManager.create(representation); + Representation returnedRepresentation = resourceManager.get(refParams); + + Element returnedEl = (Element) returnedRepresentation.getAny(); + Assert.assertEquals("Namespace is other than expected.", + ELEMENT_NAMESPACE, returnedEl.getNamespaceURI()); + Assert.assertEquals("Element name is other than expected", + ELEMENT_NAME, returnedEl.getLocalName()); + Assert.assertEquals("Value is other than expected.", + ELEMENT_VALUE, returnedEl.getTextContent()); + } + + @Test + public void putTest() { + Element representationEl = document.createElementNS(ELEMENT_NAMESPACE, ELEMENT_NAME); + representationEl.setTextContent(ELEMENT_VALUE); + Representation representation = new Representation(); + representation.setAny(representationEl); + + Element representationElNew = document.createElementNS(ELEMENT_NAMESPACE, ELEMENT_NAME); + representationElNew.setTextContent(ELEMENT_VALUE_NEW); + Representation representationNew = new Representation(); + representationNew.setAny(representationElNew); + + ReferenceParametersType refParams = resourceManager.create(representation); + resourceManager.put(refParams, representationNew); + Representation returnedRepresentation = resourceManager.get(refParams); + + Element returnedEl = (Element) returnedRepresentation.getAny(); + Assert.assertEquals("Namespace is other than expected.", + ELEMENT_NAMESPACE, returnedEl.getNamespaceURI()); + Assert.assertEquals("Element name is other than expected", + ELEMENT_NAME, returnedEl.getLocalName()); + Assert.assertEquals("Value is other than expected.", + ELEMENT_VALUE_NEW, returnedEl.getTextContent()); + } + + @Test(expected = UnknownResource.class) + public void deleteTest() { + ReferenceParametersType refParams = resourceManager.create(new Representation()); + resourceManager.delete(refParams); + resourceManager.get(refParams); + } + + @Test + public void createEmptyRepresentationTest() { + ReferenceParametersType refParams = resourceManager.create(new Representation()); + Assert.assertTrue("ResourceManager returned unexpected count of reference elements.", + refParams.getAny().size() == 1); + } + + @Test + public void putEmptyRepresentationTest() { + Element representationEl = document.createElementNS(ELEMENT_NAMESPACE, ELEMENT_NAME); + representationEl.setTextContent(ELEMENT_VALUE); + Representation representation = new Representation(); + representation.setAny(representationEl); + + ReferenceParametersType refParams = resourceManager.create(representation); + resourceManager.put(refParams, new Representation()); + } + + @Test + public void getEmptyRepresentationTest() { + ReferenceParametersType refParams = resourceManager.create(new Representation()); + Representation returnedRepresentation = resourceManager.get(refParams); + Assert.assertNull(returnedRepresentation.getAny()); + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/XSDResourceValidatorTest.java ---------------------------------------------------------------------- diff --git a/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/XSDResourceValidatorTest.java b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/XSDResourceValidatorTest.java new file mode 100644 index 0000000..45af31f --- /dev/null +++ b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/XSDResourceValidatorTest.java @@ -0,0 +1,60 @@ +/** + * 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.unit; + +import java.io.InputStream; +import javax.xml.stream.XMLStreamException; +import javax.xml.transform.stream.StreamSource; +import org.w3c.dom.Document; +import org.apache.cxf.staxutils.StaxUtils; +import org.apache.cxf.ws.transfer.Representation; +import org.apache.cxf.ws.transfer.validationtransformation.XSDResourceValidator; +import org.junit.Assert; +import org.junit.Test; + +public class XSDResourceValidatorTest { + + + private Representation loadRepresentation(InputStream input) throws XMLStreamException { + Document doc = StaxUtils.read(input); + Representation representation = new Representation(); + representation.setAny(doc.getDocumentElement()); + return representation; + } + + @Test + public void validRepresentationTest() throws XMLStreamException { + XSDResourceValidator validator = new XSDResourceValidator( + new StreamSource(getClass().getResourceAsStream("/xml/xsdresourcevalidator/schema.xsd"))); + boolean result = validator.validate(loadRepresentation( + getClass().getResourceAsStream("/xml/xsdresourcevalidator/validRepresentation.xml")), null); + Assert.assertTrue(result); + } + + @Test + public void invalidRepresentationTest() throws XMLStreamException { + XSDResourceValidator validator = new XSDResourceValidator( + new StreamSource(getClass().getResourceAsStream("/xml/xsdresourcevalidator/schema.xsd"))); + boolean result = validator.validate(loadRepresentation( + getClass().getResourceAsStream("/xml/xsdresourcevalidator/invalidRepresentation.xml")), null); + Assert.assertFalse(result); + } + +} http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/XSLTResourceTransformerTest.java ---------------------------------------------------------------------- diff --git a/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/XSLTResourceTransformerTest.java b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/XSLTResourceTransformerTest.java new file mode 100644 index 0000000..f70b9c2 --- /dev/null +++ b/rt/ws/transfer/src/test/java/org/apache/cxf/ws/transfer/unit/XSLTResourceTransformerTest.java @@ -0,0 +1,60 @@ +/** + * 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.unit; + +import java.io.InputStream; +import javax.xml.stream.XMLStreamException; +import javax.xml.transform.stream.StreamSource; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.apache.cxf.staxutils.StaxUtils; +import org.apache.cxf.ws.transfer.Representation; +import org.apache.cxf.ws.transfer.validationtransformation.ResourceTransformer; +import org.apache.cxf.ws.transfer.validationtransformation.XSLTResourceTransformer; +import org.junit.Assert; +import org.junit.Test; + +public class XSLTResourceTransformerTest { + + private Representation loadRepresentation(InputStream input) throws XMLStreamException { + Document doc = StaxUtils.read(input); + Representation representation = new Representation(); + representation.setAny(doc.getDocumentElement()); + return representation; + } + + @Test + public void transformTest() throws XMLStreamException { + ResourceTransformer transformer = new XSLTResourceTransformer(new StreamSource( + getClass().getResourceAsStream("/xml/xsltresourcetransformer/stylesheet.xsl"))); + Representation representation = loadRepresentation( + getClass().getResourceAsStream("/xml/xsltresourcetransformer/representation.xml")); + + transformer.transform(representation, null); + + Element representationEl = (Element) representation.getAny(); + Assert.assertEquals("Expected root element with name \"person\".", "person", + representationEl.getLocalName()); + Assert.assertTrue("Expected one element \"firstname\".", + representationEl.getElementsByTagName("firstname").getLength() == 1); + Assert.assertTrue("Expected one element \"lastname\".", + representationEl.getElementsByTagName("lastname").getLength() == 1); + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/invalidRepresentation.xml ---------------------------------------------------------------------- diff --git a/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/invalidRepresentation.xml b/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/invalidRepresentation.xml new file mode 100644 index 0000000..52be6ce --- /dev/null +++ b/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/invalidRepresentation.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + 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. +--> + + +<person> + <name>Name</name> + <surname>Surname</surname> +</person> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/schema.xsd ---------------------------------------------------------------------- diff --git a/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/schema.xsd b/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/schema.xsd new file mode 100644 index 0000000..6a0e7f5 --- /dev/null +++ b/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/schema.xsd @@ -0,0 +1,35 @@ +<?xml version="1.0"?> + +<!-- + 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. +--> + +<xs:schema version="1.0" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + elementFormDefault="qualified"> + + <xs:element name="person"> + <xs:complexType> + <xs:sequence> + <xs:element name="name" type="xs:string"/> + <xs:element name="surname" type="xs:string"/> + <xs:element name="address" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +</xs:schema> http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/validRepresentation.xml ---------------------------------------------------------------------- diff --git a/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/validRepresentation.xml b/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/validRepresentation.xml new file mode 100644 index 0000000..7d81e0f --- /dev/null +++ b/rt/ws/transfer/src/test/resources/xml/xsdresourcevalidator/validRepresentation.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + 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. +--> + + +<person> + <name>Name</name> + <surname>Surname</surname> + <address>Address</address> +</person> http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/test/resources/xml/xsltresourcetransformer/representation.xml ---------------------------------------------------------------------- diff --git a/rt/ws/transfer/src/test/resources/xml/xsltresourcetransformer/representation.xml b/rt/ws/transfer/src/test/resources/xml/xsltresourcetransformer/representation.xml new file mode 100644 index 0000000..a472f3c --- /dev/null +++ b/rt/ws/transfer/src/test/resources/xml/xsltresourcetransformer/representation.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + 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. +--> + + +<person> + <name>Name</name> + <surname>Surname</surname> +</person> http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/test/resources/xml/xsltresourcetransformer/stylesheet.xsl ---------------------------------------------------------------------- diff --git a/rt/ws/transfer/src/test/resources/xml/xsltresourcetransformer/stylesheet.xsl b/rt/ws/transfer/src/test/resources/xml/xsltresourcetransformer/stylesheet.xsl new file mode 100644 index 0000000..5519af8 --- /dev/null +++ b/rt/ws/transfer/src/test/resources/xml/xsltresourcetransformer/stylesheet.xsl @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + 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. +--> + +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + <xsl:output method="xml"/> + + <xsl:template match="/"> + <xsl:element name="person"> + <xsl:apply-templates/> + </xsl:element> + </xsl:template> + + <xsl:template match="/person/name"> + <xsl:element name="firstname"> + <xsl:value-of select="."/> + </xsl:element> + </xsl:template> + + <xsl:template match="/person/surname"> + <xsl:element name="lastname"> + <xsl:value-of select="."/> + </xsl:element> + </xsl:template> + +</xsl:stylesheet> http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/systests/pom.xml ---------------------------------------------------------------------- diff --git a/systests/pom.xml b/systests/pom.xml index b935926..3a5ba50 100644 --- a/systests/pom.xml +++ b/systests/pom.xml @@ -50,6 +50,7 @@ <module>cdi</module> <module>rs-http-sci</module> <module>tracing</module> - <module>jibx</module> + <module>jibx</module> + <module>ws-transfer</module> </modules> </project> http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/systests/ws-transfer/pom.xml ---------------------------------------------------------------------- diff --git a/systests/ws-transfer/pom.xml b/systests/ws-transfer/pom.xml new file mode 100644 index 0000000..f032f51 --- /dev/null +++ b/systests/ws-transfer/pom.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <artifactId>cxf-systests-ws-transfer</artifactId> + <name>Apache CXF WS-Transfer System Tests</name> + <description>Apache CXF WS-Transfer System Tests</description> + <url>http://cxf.apache.org</url> + + <parent> + <artifactId>cxf-parent</artifactId> + <groupId>org.apache.cxf</groupId> + <version>3.2.0-SNAPSHOT</version> + <relativePath>../../parent/pom.xml</relativePath> + </parent> + + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>cxf-rt-frontend-jaxws</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>cxf-rt-ws-transfer</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>cxf-rt-transports-http-jetty</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + +</project> http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/CreateStudentTest.java ---------------------------------------------------------------------- diff --git a/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/CreateStudentTest.java b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/CreateStudentTest.java new file mode 100644 index 0000000..2f9feaa --- /dev/null +++ b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/CreateStudentTest.java @@ -0,0 +1,103 @@ +/** + * 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.systest.ws.transfer; + +import javax.xml.stream.XMLStreamException; +import javax.xml.ws.soap.SOAPFaultException; +import org.w3c.dom.Document; +import org.apache.cxf.staxutils.StaxUtils; +import org.apache.cxf.ws.transfer.Create; +import org.apache.cxf.ws.transfer.CreateResponse; +import org.apache.cxf.ws.transfer.Representation; +import org.apache.cxf.ws.transfer.resourcefactory.ResourceFactory; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +public class CreateStudentTest { + + + @BeforeClass + public static void beforeClass() { + TestUtils.createStudentsServers(); + TestUtils.createTeachersServers(); + } + + @AfterClass + public static void afterClass() { + TestUtils.destroyStudentsServers(); + TestUtils.destroyTeachersServers(); + } + + @Test + public void createStudentTest() throws XMLStreamException { + Document createStudentXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/createStudent.xml")); + Create request = new Create(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(createStudentXML.getDocumentElement()); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + CreateResponse response = rf.create(request); + + Assert.assertEquals(TestUtils.RESOURCE_STUDENTS_URL, + response.getResourceCreated().getAddress().getValue()); + } + + @Test + public void createStudentPartialTest() throws XMLStreamException { + Document createStudentPartialXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/createStudentPartial.xml")); + Create request = new Create(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(createStudentPartialXML.getDocumentElement()); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + CreateResponse response = rf.create(request); + + Assert.assertEquals(TestUtils.RESOURCE_STUDENTS_URL, + response.getResourceCreated().getAddress().getValue()); + } + + @Test(expected = SOAPFaultException.class) + public void createStudentWrongTest() throws XMLStreamException { + Document createStudentWrongXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/createStudentWrong.xml")); + Create request = new Create(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(createStudentWrongXML.getDocumentElement()); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + rf.create(request); + } + + @Test(expected = SOAPFaultException.class) + public void createRandomTest() throws XMLStreamException { + Document randomXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/random.xml")); + Create request = new Create(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(randomXML.getDocumentElement()); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + rf.create(request); + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/CreateTeacherTest.java ---------------------------------------------------------------------- diff --git a/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/CreateTeacherTest.java b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/CreateTeacherTest.java new file mode 100644 index 0000000..9a67b9a --- /dev/null +++ b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/CreateTeacherTest.java @@ -0,0 +1,91 @@ +/** + * 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.systest.ws.transfer; + +import javax.xml.stream.XMLStreamException; +import javax.xml.ws.soap.SOAPFaultException; +import org.w3c.dom.Document; +import org.apache.cxf.staxutils.StaxUtils; +import org.apache.cxf.ws.transfer.Create; +import org.apache.cxf.ws.transfer.CreateResponse; +import org.apache.cxf.ws.transfer.Representation; +import org.apache.cxf.ws.transfer.resourcefactory.ResourceFactory; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +public class CreateTeacherTest { + + @BeforeClass + public static void beforeClass() { + TestUtils.createStudentsServers(); + TestUtils.createTeachersServers(); + } + + @AfterClass + public static void afterClass() { + TestUtils.destroyStudentsServers(); + TestUtils.destroyTeachersServers(); + } + + @Test + public void createTeacherTest() throws XMLStreamException { + Document createTeacherXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/createTeacher.xml")); + Create request = new Create(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(createTeacherXML.getDocumentElement()); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + CreateResponse response = rf.create(request); + + Assert.assertEquals(TestUtils.RESOURCE_TEACHERS_URL, + response.getResourceCreated().getAddress().getValue()); + } + + @Test + public void createTeacherPartialTest() throws XMLStreamException { + Document createTeacherPartialXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/createTeacherPartial.xml")); + Create request = new Create(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(createTeacherPartialXML.getDocumentElement()); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + CreateResponse response = rf.create(request); + + Assert.assertEquals(TestUtils.RESOURCE_TEACHERS_URL, + response.getResourceCreated().getAddress().getValue()); + } + + @Test(expected = SOAPFaultException.class) + public void createTeacherWrongTest() throws XMLStreamException { + Document createTeacherWrongXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/createTeacherWrong.xml")); + Create request = new Create(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(createTeacherWrongXML.getDocumentElement()); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + rf.create(request); + } + +} http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/DeleteTest.java ---------------------------------------------------------------------- diff --git a/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/DeleteTest.java b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/DeleteTest.java new file mode 100644 index 0000000..b25a944 --- /dev/null +++ b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/DeleteTest.java @@ -0,0 +1,118 @@ +/** + * 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.systest.ws.transfer; + +import javax.xml.stream.XMLStreamException; +import javax.xml.ws.soap.SOAPFaultException; +import org.w3c.dom.Document; +import org.apache.cxf.staxutils.StaxUtils; +import org.apache.cxf.ws.transfer.Create; +import org.apache.cxf.ws.transfer.CreateResponse; +import org.apache.cxf.ws.transfer.Delete; +import org.apache.cxf.ws.transfer.Get; +import org.apache.cxf.ws.transfer.Representation; +import org.apache.cxf.ws.transfer.resource.Resource; +import org.apache.cxf.ws.transfer.resourcefactory.ResourceFactory; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class DeleteTest { + + @Before + public void before() { + TestUtils.createStudentsServers(); + TestUtils.createTeachersServers(); + } + + @After + public void after() { + TestUtils.destroyStudentsServers(); + TestUtils.destroyTeachersServers(); + } + + @Test + public void deleteStudent() throws XMLStreamException { + CreateResponse response = createStudent(); + Resource client = TestUtils.createResourceClient(response.getResourceCreated()); + client.delete(new Delete()); + } + + @Test(expected = SOAPFaultException.class) + public void getDeletedStudent() throws XMLStreamException { + CreateResponse response = createStudent(); + Resource client = TestUtils.createResourceClient(response.getResourceCreated()); + client.delete(new Delete()); + client.get(new Get()); + } + + @Test(expected = SOAPFaultException.class) + public void deleteDeletedStudent() throws XMLStreamException { + CreateResponse response = createStudent(); + Resource client = TestUtils.createResourceClient(response.getResourceCreated()); + client.delete(new Delete()); + client.delete(new Delete()); + } + + @Test + public void deleteTeacher() throws XMLStreamException { + CreateResponse response = createTeacher(); + Resource client = TestUtils.createResourceClient(response.getResourceCreated()); + client.delete(new Delete()); + } + + @Test(expected = SOAPFaultException.class) + public void getDeletedTeacher() throws XMLStreamException { + CreateResponse response = createTeacher(); + Resource client = TestUtils.createResourceClient(response.getResourceCreated()); + client.delete(new Delete()); + client.get(new Get()); + } + + @Test(expected = SOAPFaultException.class) + public void deleteDeletedTeacher() throws XMLStreamException { + CreateResponse response = createTeacher(); + Resource client = TestUtils.createResourceClient(response.getResourceCreated()); + client.delete(new Delete()); + client.delete(new Delete()); + } + + private CreateResponse createStudent() throws XMLStreamException { + Document createStudentXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/createStudent.xml")); + Create request = new Create(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(createStudentXML.getDocumentElement()); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + return rf.create(request); + } + + private CreateResponse createTeacher() throws XMLStreamException { + Document createTeacherXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/createTeacher.xml")); + Create request = new Create(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(createTeacherXML.getDocumentElement()); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + return rf.create(request); + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/GetTest.java ---------------------------------------------------------------------- diff --git a/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/GetTest.java b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/GetTest.java new file mode 100644 index 0000000..65fdce7 --- /dev/null +++ b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/GetTest.java @@ -0,0 +1,111 @@ +/** + * 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.systest.ws.transfer; + +import javax.xml.stream.XMLStreamException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.apache.cxf.staxutils.StaxUtils; +import org.apache.cxf.ws.addressing.EndpointReferenceType; +import org.apache.cxf.ws.transfer.Create; +import org.apache.cxf.ws.transfer.Get; +import org.apache.cxf.ws.transfer.GetResponse; +import org.apache.cxf.ws.transfer.Representation; +import org.apache.cxf.ws.transfer.resource.Resource; +import org.apache.cxf.ws.transfer.resourcefactory.ResourceFactory; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +public class GetTest { + + private static EndpointReferenceType studentRef; + + private static EndpointReferenceType teacherRef; + + @BeforeClass + public static void beforeClass() throws XMLStreamException { + TestUtils.createStudentsServers(); + TestUtils.createTeachersServers(); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + + Document createStudentXML = StaxUtils.read( + GetTest.class.getResourceAsStream("/xml/createStudent.xml")); + Create studentRequest = new Create(); + studentRequest.setRepresentation(new Representation()); + studentRequest.getRepresentation().setAny(createStudentXML.getDocumentElement()); + studentRef = rf.create(studentRequest).getResourceCreated(); + + Document createTeacherXML = StaxUtils.read( + GetTest.class.getResourceAsStream("/xml/createTeacher.xml")); + Create teacherRequest = new Create(); + teacherRequest.setRepresentation(new Representation()); + teacherRequest.getRepresentation().setAny(createTeacherXML.getDocumentElement()); + teacherRef = rf.create(teacherRequest).getResourceCreated(); + } + + @AfterClass + public static void afterClass() { + TestUtils.destroyStudentsServers(); + TestUtils.destroyTeachersServers(); + } + + @Test + public void getStudentTest() { + Resource client = TestUtils.createResourceClient(studentRef); + GetResponse response = client.get(new Get()); + + Element representation = (Element) response.getRepresentation().getAny(); + NodeList children = representation.getChildNodes(); + for (int i = 0; i < children.getLength(); i++) { + Element child = (Element) children.item(i); + if ("name".equals(child.getLocalName())) { + Assert.assertEquals("John", child.getTextContent()); + } else if ("surname".equals(child.getLocalName())) { + Assert.assertEquals("Smith", child.getTextContent()); + } else if ("address".equals(child.getLocalName())) { + Assert.assertEquals("Street 21", child.getTextContent()); + } + } + } + + @Test + public void getTeacherTest() { + Resource client = TestUtils.createResourceClient(teacherRef); + GetResponse response = client.get(new Get()); + + Element representation = (Element) response.getRepresentation().getAny(); + NodeList children = representation.getChildNodes(); + for (int i = 0; i < children.getLength(); i++) { + Element child = (Element) children.item(i); + if ("name".equals(child.getLocalName())) { + Assert.assertEquals("Bob", child.getTextContent()); + } else if ("surname".equals(child.getLocalName())) { + Assert.assertEquals("Stuart", child.getTextContent()); + } else if ("address".equals(child.getLocalName())) { + Assert.assertEquals("Street 526", child.getTextContent()); + } + } + } + +} http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/PutTest.java ---------------------------------------------------------------------- diff --git a/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/PutTest.java b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/PutTest.java new file mode 100644 index 0000000..ec906b6 --- /dev/null +++ b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/PutTest.java @@ -0,0 +1,129 @@ +/** + * 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.systest.ws.transfer; + +import javax.xml.stream.XMLStreamException; +import javax.xml.ws.soap.SOAPFaultException; +import org.w3c.dom.Document; +import org.apache.cxf.staxutils.StaxUtils; +import org.apache.cxf.ws.transfer.Create; +import org.apache.cxf.ws.transfer.CreateResponse; +import org.apache.cxf.ws.transfer.Put; +import org.apache.cxf.ws.transfer.Representation; +import org.apache.cxf.ws.transfer.resource.Resource; +import org.apache.cxf.ws.transfer.resourcefactory.ResourceFactory; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class PutTest { + + @Before + public void before() { + TestUtils.createStudentsServers(); + TestUtils.createTeachersServers(); + } + + @After + public void after() { + TestUtils.destroyStudentsServers(); + TestUtils.destroyTeachersServers(); + } + + @Test + public void rightStudentPutTest() throws XMLStreamException { + CreateResponse createResponse = createStudent(); + + Document putStudentXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/putStudent.xml")); + Put request = new Put(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(putStudentXML.getDocumentElement()); + + Resource client = TestUtils.createResourceClient(createResponse.getResourceCreated()); + client.put(request); + } + + @Test(expected = SOAPFaultException.class) + public void wrongStudentPutTest() throws XMLStreamException { + createStudent(); + CreateResponse createResponse = createStudent(); + + Document putStudentXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/putStudent.xml")); + Put request = new Put(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(putStudentXML.getDocumentElement()); + + Resource client = TestUtils.createResourceClient(createResponse.getResourceCreated()); + client.put(request); + } + + @Test + public void rightTeacherPutTest() throws XMLStreamException { + CreateResponse createResponse = createTeacher(); + + Document putStudentXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/putTeacher.xml")); + Put request = new Put(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(putStudentXML.getDocumentElement()); + + Resource client = TestUtils.createResourceClient(createResponse.getResourceCreated()); + client.put(request); + } + + @Test(expected = SOAPFaultException.class) + public void wrongTeacherPutTest() throws XMLStreamException { + createStudent(); + CreateResponse createResponse = createTeacher(); + + Document putStudentXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/putTeacher.xml")); + Put request = new Put(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(putStudentXML.getDocumentElement()); + + Resource client = TestUtils.createResourceClient(createResponse.getResourceCreated()); + client.put(request); + } + + private CreateResponse createStudent() throws XMLStreamException { + Document createStudentXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/createStudent.xml")); + Create request = new Create(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(createStudentXML.getDocumentElement()); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + return rf.create(request); + } + + private CreateResponse createTeacher() throws XMLStreamException { + Document createTeacherXML = StaxUtils.read( + getClass().getResourceAsStream("/xml/createTeacher.xml")); + Create request = new Create(); + request.setRepresentation(new Representation()); + request.getRepresentation().setAny(createTeacherXML.getDocumentElement()); + + ResourceFactory rf = TestUtils.createResourceFactoryClient(); + return rf.create(request); + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/TestUtils.java ---------------------------------------------------------------------- diff --git a/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/TestUtils.java b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/TestUtils.java new file mode 100644 index 0000000..90645d3 --- /dev/null +++ b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/TestUtils.java @@ -0,0 +1,174 @@ +/** + * 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.systest.ws.transfer; + +import javax.xml.transform.stream.StreamSource; +import javax.xml.ws.BindingProvider; +import org.apache.cxf.endpoint.Server; +import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; +import org.apache.cxf.jaxws.JaxWsServerFactoryBean; +import org.apache.cxf.systest.ws.transfer.resolver.MyResourceResolver; +import org.apache.cxf.systest.ws.transfer.validator.StudentPutResourceValidator; +import org.apache.cxf.systest.ws.transfer.validator.TeacherResourceValidator; +import org.apache.cxf.ws.addressing.AddressingProperties; +import org.apache.cxf.ws.addressing.EndpointReferenceType; +import org.apache.cxf.ws.addressing.JAXWSAConstants; +import org.apache.cxf.ws.transfer.manager.MemoryResourceManager; +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.shared.TransferConstants; +import org.apache.cxf.ws.transfer.validationtransformation.XSDResourceTypeIdentifier; +import org.apache.cxf.ws.transfer.validationtransformation.XSLTResourceTransformer; + +/** + * Parent test for all tests in WS-Transfer System Tests. + */ +public final class TestUtils { + + public static final String RESOURCE_STUDENTS_URL = "http://localhost:8080/ResourceStudents"; + + public static final String RESOURCE_FACTORY_URL = "http://localhost:8080/ResourceFactory"; + + public static final String RESOURCE_TEACHERS_URL = "http://localhost:8081/ResourceTeachers"; + + private static Server resourceFactoryServer; + + private static Server studentsResourceServer; + + private static Server teachersResourceFactoryServer; + + private static Server teachersResourceServer; + + private TestUtils() { + + } + + protected static ResourceFactory createResourceFactoryClient() { + JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); + factory.setServiceClass(org.apache.cxf.ws.transfer.resourcefactory.ResourceFactory.class); + factory.setAddress(RESOURCE_FACTORY_URL); + return (ResourceFactory) factory.create(); + } + + protected static Resource createResourceClient(EndpointReferenceType ref) { + JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); + factory.setServiceClass(Resource.class); + factory.setAddress(ref.getAddress().getValue()); + Resource proxy = (Resource) factory.create(); + + // Add reference parameters + AddressingProperties addrProps = new AddressingProperties(); + addrProps.setTo(ref); + ((BindingProvider) proxy).getRequestContext().put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, addrProps); + + return proxy; + } + + protected static void createStudentsServers() { + UIDManager.reset(); + ResourceManager studentsResourceManager = new MemoryResourceManager(); + resourceFactoryServer = createResourceFactory(studentsResourceManager); + studentsResourceServer = createStudentsResource(studentsResourceManager); + } + + protected static void createTeachersServers() { + ResourceManager teachersResourceManager = new MemoryResourceManager(); + ResourceRemote resource = new ResourceRemote(); + resource.setManager(teachersResourceManager); + resource.getResourceTypeIdentifiers().add(new XSDResourceTypeIdentifier( + new StreamSource(TestUtils.class.getResourceAsStream("/schema/teacher.xsd")), + new XSLTResourceTransformer( + new StreamSource(TestUtils.class.getResourceAsStream("/xslt/teacherDefaultValues.xsl")), + new TeacherResourceValidator()))); + teachersResourceFactoryServer = createTeachersResourceFactoryEndpoint(resource); + teachersResourceServer = createTeacherResourceEndpoint(resource); + } + + protected static void destroyStudentsServers() { + resourceFactoryServer.destroy(); + studentsResourceServer.destroy(); + } + + protected static void destroyTeachersServers() { + teachersResourceFactoryServer.destroy(); + teachersResourceServer.destroy(); + } + + private static Server createResourceFactory(ResourceManager resourceManager) { + ResourceFactoryImpl resourceFactory = new ResourceFactoryImpl(); + resourceFactory.setResourceResolver( + new MyResourceResolver(RESOURCE_STUDENTS_URL, resourceManager, RESOURCE_TEACHERS_URL)); + resourceFactory.getResourceTypeIdentifiers().add( + new XSDResourceTypeIdentifier( + new StreamSource(TestUtils.class.getResourceAsStream("/schema/studentCreate.xsd")), + new XSLTResourceTransformer( + new StreamSource(TestUtils.class.getResourceAsStream("/xslt/studentCreate.xsl"))))); + resourceFactory.getResourceTypeIdentifiers().add( + new XSDResourceTypeIdentifier( + new StreamSource(TestUtils.class.getResourceAsStream("/schema/teacherCreateBasic.xsd")), + new XSLTResourceTransformer( + new StreamSource( + TestUtils.class.getResourceAsStream("/xslt/teacherCreateBasic.xsl"))))); + JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); + factory.setServiceClass(org.apache.cxf.ws.transfer.resourcefactory.ResourceFactory.class); + factory.setServiceBean(resourceFactory); + factory.setAddress(RESOURCE_FACTORY_URL); + + return factory.create(); + } + + private static Server createStudentsResource(ResourceManager resourceManager) { + ResourceLocal resourceLocal = new ResourceLocal(); + resourceLocal.setManager(resourceManager); + resourceLocal.getResourceTypeIdentifiers().add( + new XSDResourceTypeIdentifier( + new StreamSource(TestUtils.class.getResourceAsStream("/schema/studentPut.xsd")), + new XSLTResourceTransformer( + new StreamSource(TestUtils.class.getResourceAsStream("/xslt/studentPut.xsl")), + new StudentPutResourceValidator()))); + JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); + factory.setServiceClass(Resource.class); + factory.setServiceBean(resourceLocal); + factory.setAddress(RESOURCE_STUDENTS_URL); + return factory.create(); + } + + private static Server createTeachersResourceFactoryEndpoint(ResourceRemote resource) { + JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); + factory.setServiceClass(ResourceFactory.class); + factory.setServiceBean(resource); + factory.setAddress(RESOURCE_TEACHERS_URL + TransferConstants.RESOURCE_REMOTE_SUFFIX); + return factory.create(); + } + + private static Server createTeacherResourceEndpoint(ResourceRemote resource) { + JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); + factory.setServiceClass(Resource.class); + factory.setServiceBean(resource); + factory.setAddress(RESOURCE_TEACHERS_URL); + return factory.create(); + } + +} http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/UIDManager.java ---------------------------------------------------------------------- diff --git a/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/UIDManager.java b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/UIDManager.java new file mode 100644 index 0000000..ea06312 --- /dev/null +++ b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/UIDManager.java @@ -0,0 +1,40 @@ +/** + * 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.systest.ws.transfer; + +import java.util.concurrent.atomic.AtomicInteger; + +public final class UIDManager { + + private static final AtomicInteger UID = new AtomicInteger(1); + + private UIDManager() { + + } + + public static int getUID() { + return UID.getAndIncrement(); + } + + public static void reset() { + UID.set(1); + } + +} http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/resolver/MyResourceResolver.java ---------------------------------------------------------------------- diff --git a/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/resolver/MyResourceResolver.java b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/resolver/MyResourceResolver.java new file mode 100644 index 0000000..54f4c16 --- /dev/null +++ b/systests/ws-transfer/src/test/java/org/apache/cxf/systest/ws/transfer/resolver/MyResourceResolver.java @@ -0,0 +1,55 @@ +/** + * 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.systest.ws.transfer.resolver; + +import org.w3c.dom.Element; +import org.apache.cxf.ws.transfer.Create; +import org.apache.cxf.ws.transfer.manager.ResourceManager; +import org.apache.cxf.ws.transfer.resourcefactory.resolver.ResourceReference; +import org.apache.cxf.ws.transfer.resourcefactory.resolver.ResourceResolver; +import org.apache.cxf.ws.transfer.shared.faults.InvalidRepresentation; + +public class MyResourceResolver implements ResourceResolver { + + protected String studentURL; + + protected ResourceManager studentManager; + + protected String teachersURL; + + public MyResourceResolver(String studentURL, ResourceManager studentManager, String teachersURL) { + this.studentURL = studentURL; + this.studentManager = studentManager; + this.teachersURL = teachersURL; + } + + @Override + public ResourceReference resolve(Create body) { + Element representationEl = (Element) body.getRepresentation().getAny(); + if ("student".equals(representationEl.getLocalName())) { + return new ResourceReference(studentURL, studentManager); + } else if ("teacher".equals(representationEl.getLocalName())) { + return new ResourceReference(teachersURL, null); + } else { + throw new InvalidRepresentation(); + } + } + +}
