You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2016/05/26 21:46:03 UTC
[35/50] [abbrv] cxf git commit: Squash commit of ws-transfer
implementation from Erich Duda (dudaerich) This closes #33
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resource/ResourceRemote.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resource/ResourceRemote.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resource/ResourceRemote.java
new file mode 100644
index 0000000..52916ea
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resource/ResourceRemote.java
@@ -0,0 +1,49 @@
+/**
+ * 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.resource;
+
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+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.resourcefactory.ResourceFactory;
+import org.apache.cxf.ws.transfer.validationtransformation.ValidAndTransformHelper;
+
+/**
+ * Implementation of the Resource interface for resources, which are created remotely.
+ * @see org.apache.cxf.ws.transfer.resourcefactory.resolver.ResourceResolver
+ */
+public class ResourceRemote extends ResourceLocal implements ResourceFactory {
+
+ @Override
+ public CreateResponse create(Create body) {
+ Representation representation = body.getRepresentation();
+ ValidAndTransformHelper.validationAndTransformation(
+ getResourceTypeIdentifiers(), representation, null);
+ ReferenceParametersType refParams = getManager().create(representation);
+ CreateResponse response = new CreateResponse();
+ response.setResourceCreated(new EndpointReferenceType());
+ response.getResourceCreated().setReferenceParameters(refParams);
+ response.setRepresentation(body.getRepresentation());
+ return response;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/ResourceFactory.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/ResourceFactory.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/ResourceFactory.java
new file mode 100644
index 0000000..da28d43
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/ResourceFactory.java
@@ -0,0 +1,61 @@
+/**
+ * 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.resourcefactory;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.xml.ws.Action;
+import javax.xml.ws.soap.Addressing;
+import org.apache.cxf.ws.transfer.Create;
+import org.apache.cxf.ws.transfer.CreateResponse;
+import org.apache.cxf.ws.transfer.shared.TransferConstants;
+
+/**
+ * The interface definition of a Resource Factory web service, according to the specification.
+ */
+
+@WebService(targetNamespace = TransferConstants.TRANSFER_2011_03_NAMESPACE,
+ name = TransferConstants.NAME_RESOURCE_FACTORY)
+@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
+@Addressing(enabled = true, required = true)
+public interface ResourceFactory {
+ @Action(
+ input = TransferConstants.ACTION_CREATE,
+ output = TransferConstants.ACTION_CREATE_RESPONSE
+ )
+ @WebMethod(operationName = TransferConstants.NAME_OPERATION_CREATE)
+ @WebResult(
+ name = TransferConstants.NAME_MESSAGE_CREATE_RESPONSE,
+ targetNamespace = TransferConstants.TRANSFER_2011_03_NAMESPACE,
+ partName = "Body"
+ )
+ CreateResponse create(
+ @WebParam(
+ name = TransferConstants.NAME_MESSAGE_CREATE,
+ targetNamespace = TransferConstants.TRANSFER_2011_03_NAMESPACE,
+ partName = "Body"
+ )
+ Create body
+ );
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/ResourceFactoryImpl.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/ResourceFactoryImpl.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/ResourceFactoryImpl.java
new file mode 100644
index 0000000..32ca4f6
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/ResourceFactoryImpl.java
@@ -0,0 +1,153 @@
+/**
+ * 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.resourcefactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.cxf.interceptor.LoggingInInterceptor;
+import org.apache.cxf.interceptor.LoggingOutInterceptor;
+import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
+import org.apache.cxf.ws.addressing.AttributedURIType;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+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.dialect.Dialect;
+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.TransferConstants;
+import org.apache.cxf.ws.transfer.shared.faults.UnknownDialect;
+import org.apache.cxf.ws.transfer.validationtransformation.ResourceTypeIdentifier;
+import org.apache.cxf.ws.transfer.validationtransformation.ValidAndTransformHelper;
+
+/**
+ * ResourceFactory implementation.
+ */
+public class ResourceFactoryImpl implements ResourceFactory {
+
+ protected ResourceResolver resourceResolver;
+
+ protected List<ResourceTypeIdentifier> resourceTypeIdentifiers;
+
+ protected Map<String, Dialect> dialects;
+
+ public ResourceFactoryImpl() {
+ dialects = new HashMap<String, Dialect>();
+ }
+
+ @Override
+ public CreateResponse create(Create body) {
+ if (body.getDialect() != null && !body.getDialect().isEmpty()) {
+ if (dialects.containsKey(body.getDialect())) {
+ Dialect dialect = dialects.get(body.getDialect());
+ Representation representation = dialect.processCreate(body);
+ body.setRepresentation(representation);
+ } else {
+ throw new UnknownDialect();
+ }
+ }
+ ValidAndTransformHelper.validationAndTransformation(
+ resourceTypeIdentifiers, body.getRepresentation(), null);
+
+ ResourceReference resourceReference = resourceResolver.resolve(body);
+ if (resourceReference.getResourceManager() != null) {
+ return createLocally(body, resourceReference);
+ } else {
+ return createRemotely(body, resourceReference);
+ }
+ }
+
+ public ResourceResolver getResourceResolver() {
+ return resourceResolver;
+ }
+
+ public void setResourceResolver(ResourceResolver resourceResolver) {
+ this.resourceResolver = resourceResolver;
+ }
+
+ public List<ResourceTypeIdentifier> getResourceTypeIdentifiers() {
+ if (resourceTypeIdentifiers == null) {
+ resourceTypeIdentifiers = new ArrayList<>();
+ }
+ return resourceTypeIdentifiers;
+ }
+
+ public void setResourceTypeIdentifiers(List<ResourceTypeIdentifier> resourceTypeIdentifiers) {
+ this.resourceTypeIdentifiers = resourceTypeIdentifiers;
+ }
+
+ /**
+ * Register Dialect object for URI.
+ * @param uri
+ * @param dialect
+ */
+ public void registerDialect(String uri, Dialect dialect) {
+ if (dialects.containsKey(uri)) {
+ throw new IllegalArgumentException(String.format("URI \"%s\" is already registered", uri));
+ }
+ dialects.put(uri, dialect);
+ }
+
+ /**
+ * Unregister dialect URI.
+ * @param uri
+ */
+ public void unregisterDialect(String uri) {
+ if (!dialects.containsKey(uri)) {
+ throw new IllegalArgumentException(String.format("URI \"%s\" is not registered", uri));
+ }
+ dialects.remove(uri);
+ }
+
+ private CreateResponse createLocally(Create body, ResourceReference ref) {
+ Representation representation = body.getRepresentation();
+ ReferenceParametersType refParams = ref.getResourceManager().create(representation);
+
+ CreateResponse response = new CreateResponse();
+ response.setResourceCreated(new EndpointReferenceType());
+ response.getResourceCreated().setAddress(new AttributedURIType());
+ response.getResourceCreated()
+ .getAddress()
+ .setValue(ref.getResourceURL());
+ response.getResourceCreated()
+ .setReferenceParameters(refParams);
+ response.setRepresentation(body.getRepresentation());
+
+ return response;
+ }
+
+ private CreateResponse createRemotely(Create body, ResourceReference ref) {
+ JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
+ factory.getInInterceptors().add(new LoggingInInterceptor());
+ factory.getOutInterceptors().add(new LoggingOutInterceptor());
+ factory.setServiceClass(ResourceFactory.class);
+ factory.setAddress(ref.getResourceURL()
+ + TransferConstants.RESOURCE_REMOTE_SUFFIX);
+ ResourceFactory client = (ResourceFactory) factory.create();
+ CreateResponse response = client.create(body);
+ // Adding of endpoint address to the response.
+ response.getResourceCreated().setAddress(new AttributedURIType());
+ response.getResourceCreated().getAddress().setValue(ref.getResourceURL());
+ return response;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/ResourceReference.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/ResourceReference.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/ResourceReference.java
new file mode 100644
index 0000000..1e86030
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/ResourceReference.java
@@ -0,0 +1,61 @@
+/**
+ * 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.resourcefactory.resolver;
+
+import org.apache.cxf.ws.transfer.manager.ResourceManager;
+
+/**
+ * Class intended as return value from the ResourceResolver.
+ * @see ResourceResolver
+ */
+public class ResourceReference {
+
+ private ResourceManager resourceManager;
+
+ private String resourceURL;
+
+ public ResourceReference() {
+
+ }
+
+ public ResourceReference(
+ String resourceURL,
+ ResourceManager resourceManager) {
+ this.resourceURL = resourceURL;
+ this.resourceManager = resourceManager;
+ }
+
+ public ResourceManager getResourceManager() {
+ return resourceManager;
+ }
+
+ public void setResourceManager(ResourceManager resourceManager) {
+ this.resourceManager = resourceManager;
+ }
+
+ public String getResourceURL() {
+ return resourceURL;
+ }
+
+ public void setResourceURL(String resourceURL) {
+ this.resourceURL = resourceURL;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/ResourceResolver.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/ResourceResolver.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/ResourceResolver.java
new file mode 100644
index 0000000..6e4339c
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/ResourceResolver.java
@@ -0,0 +1,39 @@
+/**
+ * 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.resourcefactory.resolver;
+
+import org.apache.cxf.ws.transfer.Create;
+
+/**
+ * The interface for resolving, where the Resource will be created.
+ */
+public interface ResourceResolver {
+
+ /**
+ * Method for resolving, where the Resource will be created.
+ * @param body SOAP body
+ * @return ResourceReference object. If the Resource should be created locally,
+ * so the ResourceReference object must contain address and reference to the
+ * ResourceManager object. Otherwise the ResourceReference must contain only
+ * the address to the ResourceRemote endpoint.
+ */
+ ResourceReference resolve(Create body);
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/SimpleResourceResolver.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/SimpleResourceResolver.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/SimpleResourceResolver.java
new file mode 100644
index 0000000..c988319
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/resourcefactory/resolver/SimpleResourceResolver.java
@@ -0,0 +1,69 @@
+/**
+ * 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.resourcefactory.resolver;
+
+import org.apache.cxf.ws.transfer.Create;
+import org.apache.cxf.ws.transfer.manager.ResourceManager;
+
+/**
+ * The simple ResourceResolver, which always returns a predefined resource
+ * location.
+ */
+public class SimpleResourceResolver implements ResourceResolver {
+
+ protected ResourceManager resourceManager;
+
+ protected String resourceURL;
+
+ public SimpleResourceResolver() {
+
+ }
+
+ public SimpleResourceResolver(String resourceURL) {
+ this.resourceURL = resourceURL;
+ }
+
+ public SimpleResourceResolver(String resourceURL, ResourceManager resourceManager) {
+ this.resourceURL = resourceURL;
+ this.resourceManager = resourceManager;
+ }
+
+ @Override
+ public ResourceReference resolve(Create body) {
+ return new ResourceReference(resourceURL, resourceManager);
+ }
+
+ public String getResourceURL() {
+ return resourceURL;
+ }
+
+ public void setResourceURL(String resourceURL) {
+ this.resourceURL = resourceURL;
+ }
+
+ public ResourceManager getResourceManager() {
+ return resourceManager;
+ }
+
+ public void setResourceManager(ResourceManager resourceManager) {
+ this.resourceManager = resourceManager;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/TransferConstants.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/TransferConstants.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/TransferConstants.java
new file mode 100644
index 0000000..3da2107
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/TransferConstants.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.shared;
+
+/**
+ * Helper class for holding of constants.
+ */
+public final class TransferConstants {
+
+ public static final String TRANSFER_2011_03_NAMESPACE = "http://www.w3.org/2011/03/ws-tra";
+
+ public static final String NAME_RESOURCE = "Resource";
+ public static final String NAME_RESOURCE_FACTORY = "ResourceFactory";
+
+ public static final String NAME_OPERATION_GET = "Get";
+ public static final String NAME_OPERATION_DELETE = "Delete";
+ public static final String NAME_OPERATION_PUT = "Put";
+ public static final String NAME_OPERATION_CREATE = "Create";
+
+ public static final String NAME_MESSAGE_GET = "Get";
+ public static final String NAME_MESSAGE_GET_RESPONSE = "GetResponse";
+ public static final String NAME_MESSAGE_DELETE = "Delete";
+ public static final String NAME_MESSAGE_DELETE_RESPONSE = "DeleteResponse";
+ public static final String NAME_MESSAGE_PUT = "Put";
+ public static final String NAME_MESSAGE_PUT_RESPONSE = "PutResponse";
+ public static final String NAME_MESSAGE_CREATE = "Create";
+ public static final String NAME_MESSAGE_CREATE_RESPONSE = "CreateResponse";
+
+ public static final String ACTION_GET = "http://www.w3.org/2011/03/ws-tra/Get";
+ public static final String ACTION_GET_RESPONSE = "http://www.w3.org/2011/03/ws-tra/GetResponse";
+ public static final String ACTION_DELETE = "http://www.w3.org/2011/03/ws-tra/Delete";
+ public static final String ACTION_DELETE_RESPONSE = "http://www.w3.org/2011/03/ws-tra/DeleteResponse";
+ public static final String ACTION_PUT = "http://www.w3.org/2011/03/ws-tra/Put";
+ public static final String ACTION_PUT_RESPONSE = "http://www.w3.org/2011/03/ws-tra/PutResponse";
+ public static final String ACTION_CREATE = "http://www.w3.org/2011/03/ws-tra/Create";
+ public static final String ACTION_CREATE_RESPONSE = "http://www.w3.org/2011/03/ws-tra/CreateResponse";
+
+ public static final String RESOURCE_REMOTE_SUFFIX = "_factory";
+
+ private TransferConstants() {
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/InvalidRepresentation.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/InvalidRepresentation.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/InvalidRepresentation.java
new file mode 100644
index 0000000..21ea6c3
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/InvalidRepresentation.java
@@ -0,0 +1,41 @@
+/**
+ * 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.shared.faults;
+
+import javax.xml.namespace.QName;
+import org.apache.cxf.ws.transfer.shared.TransferConstants;
+
+/**
+ * Definition of the InvalidRepresentation SOAPFault.
+ */
+public class InvalidRepresentation extends WSTransferFault {
+
+ private static final long serialVersionUID = 330259919571428100L;
+
+ private static final String SUBCODE = "InvalidRepresentation";
+
+ private static final String REASON = "The supplied representation is invalid";
+
+ public InvalidRepresentation() {
+ super(REASON, null,
+ new QName(TransferConstants.TRANSFER_2011_03_NAMESPACE, SUBCODE));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/PutDenied.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/PutDenied.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/PutDenied.java
new file mode 100644
index 0000000..b0c6ad6
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/PutDenied.java
@@ -0,0 +1,44 @@
+/**
+ * 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.shared.faults;
+
+import javax.xml.namespace.QName;
+import org.apache.cxf.ws.transfer.shared.TransferConstants;
+
+/**
+ * Definition of the PutDenied SOAPFault.
+ */
+public class PutDenied extends WSTransferFault {
+
+ private static final long serialVersionUID = -6644888926499946963L;
+
+ private static final String SUBCODE = "UpdateDenied";
+
+ private static final String REASON = "One or more elements or attributes cannot be updated.";
+
+ private static final String DETAIL =
+ "An OPTIONAL list of the QNames of the elements or attributes that are not allowed to be updated.";
+
+ public PutDenied() {
+ super(REASON, DETAIL,
+ new QName(TransferConstants.TRANSFER_2011_03_NAMESPACE, SUBCODE));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/UnknownDialect.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/UnknownDialect.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/UnknownDialect.java
new file mode 100644
index 0000000..5c9f9ea
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/UnknownDialect.java
@@ -0,0 +1,43 @@
+/**
+ * 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.shared.faults;
+
+import javax.xml.namespace.QName;
+import org.apache.cxf.ws.transfer.shared.TransferConstants;
+
+/**
+ * Definition of the UnknownDialect SOAPFault.
+ */
+public class UnknownDialect extends WSTransferFault {
+
+ private static final long serialVersionUID = 7139243705016686015L;
+
+ private static final String SUBCODE = "UnknownDialect";
+
+ private static final String REASON = "The specified Dialect IRI is not known.";
+
+ private static final String DETAIL = "The unknown IRI if specified";
+
+ public UnknownDialect() {
+ super(REASON, DETAIL,
+ new QName(TransferConstants.TRANSFER_2011_03_NAMESPACE, SUBCODE));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/UnknownResource.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/UnknownResource.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/UnknownResource.java
new file mode 100644
index 0000000..1b3c61d
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/UnknownResource.java
@@ -0,0 +1,42 @@
+/**
+ * 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.shared.faults;
+
+import javax.xml.namespace.QName;
+import org.apache.cxf.ws.transfer.shared.TransferConstants;
+
+/**
+ * This fault MUST be generated when a request specifies a resource
+ * that is not known.
+ */
+public class UnknownResource extends WSTransferFault {
+
+ private static final long serialVersionUID = 2925090710469446447L;
+
+ private static final String SUBCODE = "UnknownResource";
+
+ private static final String REASON = "The resource is not known.";
+
+ public UnknownResource() {
+ super(REASON, null,
+ new QName(TransferConstants.TRANSFER_2011_03_NAMESPACE, SUBCODE));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/WSTransferFault.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/WSTransferFault.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/WSTransferFault.java
new file mode 100644
index 0000000..673da39
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/shared/faults/WSTransferFault.java
@@ -0,0 +1,45 @@
+/**
+ * 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.shared.faults;
+
+import javax.xml.namespace.QName;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.apache.cxf.binding.soap.SoapFault;
+import org.apache.cxf.helpers.DOMUtils;
+
+/**
+ * The parent for all WS-Transfer-specific faults.
+ */
+public abstract class WSTransferFault extends SoapFault {
+
+ private static final long serialVersionUID = -7603229392321418734L;
+
+ public WSTransferFault(String reason, String detail, QName faultCode) {
+ super(reason, faultCode);
+ if (detail != null) {
+ Document doc = DOMUtils.createDocument();
+ Element detailEl = doc.createElement("detail");
+ detailEl.setTextContent(detail);
+ setDetail(detailEl);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTransformer.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTransformer.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTransformer.java
new file mode 100644
index 0000000..69cdb20
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTransformer.java
@@ -0,0 +1,30 @@
+/**
+ * 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.validationtransformation;
+
+import org.apache.cxf.ws.transfer.Representation;
+
+/**
+ * The interface for a Transformer objects.
+ */
+public interface ResourceTransformer {
+
+ ResourceValidator transform(Representation newRepresentation, Representation oldRepresentation);
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTypeIdentifier.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTypeIdentifier.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTypeIdentifier.java
new file mode 100644
index 0000000..f04e774
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTypeIdentifier.java
@@ -0,0 +1,36 @@
+/**
+ * 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.validationtransformation;
+
+import org.apache.cxf.ws.transfer.Representation;
+
+/**
+ * The interface for TypeIdentifier objects.
+ */
+public interface ResourceTypeIdentifier {
+
+ /**
+ * Returns true if the representation corresponds to type, which object represents.
+ * @param representation
+ * @return
+ */
+ ResourceTypeIdentifierResult identify(Representation representation);
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTypeIdentifierResult.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTypeIdentifierResult.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTypeIdentifierResult.java
new file mode 100644
index 0000000..c8999c0
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceTypeIdentifierResult.java
@@ -0,0 +1,56 @@
+/**
+ * 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.validationtransformation;
+
+/**
+ * This class represents the result from the ResourceTypeIdentifier.
+ */
+public class ResourceTypeIdentifierResult {
+
+ private boolean correct;
+
+ private ResourceTransformer transformer;
+
+ public ResourceTypeIdentifierResult() {
+
+ }
+
+ public ResourceTypeIdentifierResult(boolean result, ResourceTransformer transformer) {
+ this.correct = result;
+ this.transformer = transformer;
+ }
+
+ public boolean isCorrect() {
+ return correct;
+ }
+
+ public void setCorrect(boolean correct) {
+ this.correct = correct;
+ }
+
+ public ResourceTransformer getTransformer() {
+ return transformer;
+ }
+
+ public void setTransformer(ResourceTransformer transformer) {
+ this.transformer = transformer;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceValidator.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceValidator.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceValidator.java
new file mode 100644
index 0000000..b31ec29
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ResourceValidator.java
@@ -0,0 +1,31 @@
+/**
+ * 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.validationtransformation;
+
+import org.apache.cxf.ws.transfer.Representation;
+
+/**
+ * The interface for Validator objects.
+ */
+public interface ResourceValidator {
+
+ boolean validate(Representation newRepresentation, Representation oldRepresentation);
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ValidAndTransformHelper.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ValidAndTransformHelper.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ValidAndTransformHelper.java
new file mode 100644
index 0000000..4c806ef
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/ValidAndTransformHelper.java
@@ -0,0 +1,63 @@
+/**
+ * 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.validationtransformation;
+
+import java.util.List;
+import org.apache.cxf.ws.transfer.Representation;
+import org.apache.cxf.ws.transfer.shared.faults.InvalidRepresentation;
+
+/**
+ * Helper class for validation and transformation.
+ */
+public final class ValidAndTransformHelper {
+
+ private ValidAndTransformHelper() {
+
+ }
+
+ /**
+ * Validation and transformation process.
+ * @param resourceTypeIdentifiers List of resourceTypeIdentifiers.
+ * @param newRepresentation Incoming representation.
+ * @param oldRepresentation Representation stored in the ResourceManager.
+ */
+ public static void validationAndTransformation(
+ List<ResourceTypeIdentifier> resourceTypeIdentifiers,
+ Representation newRepresentation,
+ Representation oldRepresentation) {
+ if (resourceTypeIdentifiers != null && !resourceTypeIdentifiers.isEmpty()) {
+ for (ResourceTypeIdentifier resourceIdentifier : resourceTypeIdentifiers) {
+ ResourceTypeIdentifierResult valResult = resourceIdentifier.identify(newRepresentation);
+ if (valResult.isCorrect()) {
+ if (valResult.getTransformer() != null) {
+ ResourceTransformer transformer = valResult.getTransformer();
+ ResourceValidator validator = transformer.transform(newRepresentation, oldRepresentation);
+ if (validator != null && !validator.validate(newRepresentation, oldRepresentation)) {
+ throw new InvalidRepresentation();
+ }
+ }
+ return;
+ }
+ }
+ throw new InvalidRepresentation();
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSDResourceTypeIdentifier.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSDResourceTypeIdentifier.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSDResourceTypeIdentifier.java
new file mode 100644
index 0000000..a6b5505
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSDResourceTypeIdentifier.java
@@ -0,0 +1,87 @@
+/**
+ * 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.validationtransformation;
+
+import java.io.IOException;
+import java.util.logging.Logger;
+
+import javax.annotation.Resource;
+import javax.xml.XMLConstants;
+import javax.xml.transform.Source;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import javax.xml.validation.Validator;
+import javax.xml.ws.WebServiceContext;
+
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
+import org.apache.cxf.binding.soap.SoapFault;
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.SoapVersion;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.jaxws.context.WrappedMessageContext;
+import org.apache.cxf.ws.transfer.Representation;
+
+/**
+ * Implementation of the ResourceTypeIdentifier interface using by XSDSchema validation.
+ */
+public class XSDResourceTypeIdentifier implements ResourceTypeIdentifier {
+
+ private static final Logger LOG = LogUtils.getL7dLogger(XSDResourceTypeIdentifier.class);
+
+ protected ResourceTransformer resourceTransformer;
+
+ protected Validator validator;
+
+ @Resource
+ private WebServiceContext context;
+
+ public XSDResourceTypeIdentifier(Source xsd, ResourceTransformer resourceTransformer) {
+ try {
+ this.resourceTransformer = resourceTransformer;
+ SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+ Schema schema = schemaFactory.newSchema(xsd);
+ this.validator = schema.newValidator();
+ } catch (SAXException ex) {
+ LOG.severe(ex.getLocalizedMessage());
+ throw new SoapFault("Internal error", getSoapVersion().getReceiver());
+ }
+ }
+
+ @Override
+ public ResourceTypeIdentifierResult identify(Representation representation) {
+ try {
+ validator.validate(new DOMSource((Node) representation.getAny()));
+ } catch (SAXException ex) {
+ return new ResourceTypeIdentifierResult(false, resourceTransformer);
+ } catch (IOException ex) {
+ LOG.severe(ex.getLocalizedMessage());
+ throw new SoapFault("Internal error", getSoapVersion().getReceiver());
+ }
+ return new ResourceTypeIdentifierResult(true, resourceTransformer);
+ }
+
+ private SoapVersion getSoapVersion() {
+ WrappedMessageContext wmc = (WrappedMessageContext) context.getMessageContext();
+ SoapMessage message = (SoapMessage) wmc.getWrappedMessage();
+ return message.getVersion();
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSDResourceValidator.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSDResourceValidator.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSDResourceValidator.java
new file mode 100644
index 0000000..f5da781
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSDResourceValidator.java
@@ -0,0 +1,88 @@
+/**
+ * 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.validationtransformation;
+
+import java.io.IOException;
+import java.util.logging.Logger;
+
+import javax.annotation.Resource;
+import javax.xml.XMLConstants;
+import javax.xml.transform.Source;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import javax.xml.validation.Validator;
+import javax.xml.ws.WebServiceContext;
+
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
+import org.apache.cxf.binding.soap.SoapFault;
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.SoapVersion;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.jaxws.context.WrappedMessageContext;
+import org.apache.cxf.ws.transfer.Representation;
+
+/**
+ * Implementation of the ResourceValidator interface for Schema validation.
+ */
+public class XSDResourceValidator implements ResourceValidator {
+
+ private static final Logger LOG = LogUtils.getL7dLogger(XSDResourceValidator.class);
+
+ protected Validator validator;
+
+ @Resource
+ private WebServiceContext context;
+
+ public XSDResourceValidator(Source xsd, ResourceTransformer resourceTransformer) {
+ try {
+ SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+ Schema schema = schemaFactory.newSchema(xsd);
+ this.validator = schema.newValidator();
+ } catch (SAXException ex) {
+ LOG.severe(ex.getLocalizedMessage());
+ throw new SoapFault("Internal error", getSoapVersion().getReceiver());
+ }
+ }
+
+ public XSDResourceValidator(Source xsd) {
+ this(xsd, null);
+ }
+
+ @Override
+ public boolean validate(Representation representation, Representation oldRepresentation) {
+ try {
+ validator.validate(new DOMSource((Node) representation.getAny()));
+ } catch (SAXException ex) {
+ return false;
+ } catch (IOException ex) {
+ LOG.severe(ex.getLocalizedMessage());
+ throw new SoapFault("Internal error", getSoapVersion().getReceiver());
+ }
+ return true;
+ }
+
+ private SoapVersion getSoapVersion() {
+ WrappedMessageContext wmc = (WrappedMessageContext) context.getMessageContext();
+ SoapMessage message = (SoapMessage) wmc.getWrappedMessage();
+ return message.getVersion();
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSLTResourceTransformer.java
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSLTResourceTransformer.java b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSLTResourceTransformer.java
new file mode 100644
index 0000000..0538dd3
--- /dev/null
+++ b/rt/ws/transfer/src/main/java/org/apache/cxf/ws/transfer/validationtransformation/XSLTResourceTransformer.java
@@ -0,0 +1,87 @@
+/**
+ * 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.validationtransformation;
+
+import java.util.logging.Logger;
+
+import javax.annotation.Resource;
+import javax.xml.transform.Source;
+import javax.xml.transform.Templates;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.ws.WebServiceContext;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.apache.cxf.binding.soap.SoapFault;
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.SoapVersion;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.feature.transform.XSLTUtils;
+import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.jaxws.context.WrappedMessageContext;
+import org.apache.cxf.ws.transfer.Representation;
+
+/**
+ * Implementation of the ResourceTransformer for the XSL transformation.
+ */
+public class XSLTResourceTransformer implements ResourceTransformer {
+
+ private static final Logger LOG = LogUtils.getL7dLogger(XSLTResourceTransformer.class);
+
+ protected Templates templates;
+
+ protected ResourceValidator validator;
+
+ @Resource
+ private WebServiceContext context;
+
+ public XSLTResourceTransformer(Source xsl) {
+ this(xsl, null);
+ }
+
+ public XSLTResourceTransformer(Source xsl, ResourceValidator validator) {
+ this.validator = validator;
+ try {
+ templates = TransformerFactory.newInstance().newTemplates(xsl);
+ } catch (TransformerConfigurationException e) {
+ LOG.severe(e.getLocalizedMessage());
+ throw new SoapFault("Internal error", getSoapVersion().getReceiver());
+ }
+ }
+
+ @Override
+ public ResourceValidator transform(Representation newRepresentation, Representation oldRepresentation) {
+ Document doc = DOMUtils.createDocument();
+ Node representation = (Node) newRepresentation.getAny();
+ Node importedNode = doc.importNode(representation, true);
+ doc.appendChild(importedNode);
+ Document result = XSLTUtils.transform(templates, doc);
+ newRepresentation.setAny(result.getDocumentElement());
+ return validator;
+ }
+
+ private SoapVersion getSoapVersion() {
+ WrappedMessageContext wmc = (WrappedMessageContext) context.getMessageContext();
+ SoapMessage message = (SoapMessage) wmc.getWrappedMessage();
+ return message.getVersion();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/resources/handler-chains/reference-parameter-parsing.xml
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/resources/handler-chains/reference-parameter-parsing.xml b/rt/ws/transfer/src/main/resources/handler-chains/reference-parameter-parsing.xml
new file mode 100644
index 0000000..e1018f8
--- /dev/null
+++ b/rt/ws/transfer/src/main/resources/handler-chains/reference-parameter-parsing.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.
+-->
+<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
+ <handler-chain>
+ <handler>
+ <handler-name>ReferenceParameterParsingHandler</handler-name>
+ <handler-class>org.apache.cxf.ws.transfer.shared.handlers.ReferenceParameterParsingHandler</handler-class>
+ </handler>
+ </handler-chain>
+</handler-chains>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/resources/schemas/catalog-fragment.cat
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/resources/schemas/catalog-fragment.cat b/rt/ws/transfer/src/main/resources/schemas/catalog-fragment.cat
new file mode 100644
index 0000000..6eb029c
--- /dev/null
+++ b/rt/ws/transfer/src/main/resources/schemas/catalog-fragment.cat
@@ -0,0 +1,21 @@
+--
+ 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.
+--
+
+SYSTEM "http://www.w3.org/2011/03/ws-fra" "fragment.xsd"
+
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/resources/schemas/catalog.cat
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/resources/schemas/catalog.cat b/rt/ws/transfer/src/main/resources/schemas/catalog.cat
new file mode 100644
index 0000000..22bc651
--- /dev/null
+++ b/rt/ws/transfer/src/main/resources/schemas/catalog.cat
@@ -0,0 +1,23 @@
+--
+ 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.
+--
+
+SYSTEM "http://www.w3.org/2011/03/ws-tra" "transfer.xsd"
+SYSTEM "http://www.w3.org/2005/08/addressing" "ws-addr.xsd"
+SYSTEM "http://www.w3.org/2006/03/addressing/ws-addr.xsd" "ws-addr.xsd"
+
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/resources/schemas/fragment.xsd
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/resources/schemas/fragment.xsd b/rt/ws/transfer/src/main/resources/schemas/fragment.xsd
new file mode 100644
index 0000000..519cb3a
--- /dev/null
+++ b/rt/ws/transfer/src/main/resources/schemas/fragment.xsd
@@ -0,0 +1,87 @@
+<?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.
+-->
+
+<xs:schema
+ targetNamespace='http://www.w3.org/2011/03/ws-fra'
+ xmlns:tns='http://www.w3.org/2011/03/ws-fra'
+ xmlns:xs='http://www.w3.org/2001/XMLSchema'
+ elementFormDefault='qualified'
+ blockDefault='#all' >
+
+ <xs:complexType name='ExpressionType' mixed="true">
+ <xs:sequence>
+ <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>
+ </xs:sequence>
+ <xs:attribute name='Language' type='xs:anyURI' use='optional'/>
+ <xs:attribute name='Mode' type='xs:anyURI' use='optional'/>
+ <xs:anyAttribute namespace='##other' processContents='lax'/>
+ </xs:complexType>
+ <xs:element name='Expression' type='tns:ExpressionType'/>
+
+ <xs:complexType name='ValueType' mixed="true">
+ <xs:sequence>
+ <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>
+ </xs:sequence>
+ <xs:anyAttribute namespace='##other' processContents='lax'/>
+ </xs:complexType>
+ <xs:element name='Value' type='tns:ValueType'/>
+
+ <xs:element name='Fragment'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name='Expression' type='tns:ExpressionType'/>
+ <xs:element name='Value' type='tns:ValueType' minOccurs='0'/>
+ <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>
+ </xs:sequence>
+ <xs:anyAttribute namespace='##other' processContents='lax'/>
+ </xs:complexType>
+ </xs:element>
+
+ <!-- Policy -->
+ <xs:complexType name='URI'>
+ <xs:simpleContent>
+ <xs:extension base='xs:anyURI'>
+ <xs:anyAttribute namespace='##other' processContents='lax'/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:element name='FragmentAssertion'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name='Language' minOccurs='0' maxOccurs='unbounded'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any namespace='##other' processContents='lax' minOccurs='0'
+ maxOccurs='0'/>
+ </xs:sequence>
+ <xs:attribute name='URI' type='xs:anyURI' use='required' />
+ <xs:anyAttribute namespace="##other" processContents='lax'/>
+ </xs:complexType>
+ </xs:element>
+ <xs:any namespace='##other' processContents='lax' minOccurs='0'
+ maxOccurs='unbounded'/>
+ </xs:sequence>
+ <xs:anyAttribute namespace='##other' processContents='lax' />
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/resources/schemas/transfer.xjb
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/resources/schemas/transfer.xjb b/rt/ws/transfer/src/main/resources/schemas/transfer.xjb
new file mode 100644
index 0000000..ea8d17e
--- /dev/null
+++ b/rt/ws/transfer/src/main/resources/schemas/transfer.xjb
@@ -0,0 +1,37 @@
+<?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.
+-->
+
+<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <bindings schemaLocation="http://www.w3.org/2006/03/addressing/ws-addr.xsd">
+ <schemaBindings map="false"/>
+ <bindings node="//xs:complexType[@name='ReferenceParametersType']">
+ <class ref="org.apache.cxf.ws.addressing.ReferenceParametersType"/>
+ </bindings>
+ <bindings node="//xs:complexType[@name='EndpointReferenceType']">
+ <class ref="org.apache.cxf.ws.addressing.EndpointReferenceType"/>
+ </bindings>
+ <bindings node="//xs:complexType[@name='AttributedURIType']">
+ <class ref="org.apache.cxf.ws.addressing.AttributedURIType"/>
+ </bindings>
+ </bindings>
+</bindings>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/resources/schemas/transfer.xsd
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/resources/schemas/transfer.xsd b/rt/ws/transfer/src/main/resources/schemas/transfer.xsd
new file mode 100644
index 0000000..de5c48a
--- /dev/null
+++ b/rt/ws/transfer/src/main/resources/schemas/transfer.xsd
@@ -0,0 +1,192 @@
+<?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.
+-->
+
+<xs:schema
+ targetNamespace='http://www.w3.org/2011/03/ws-tra'
+ xmlns:tns='http://www.w3.org/2011/03/ws-tra'
+ xmlns:xs='http://www.w3.org/2001/XMLSchema'
+ xmlns:wsa='http://www.w3.org/2005/08/addressing'
+ elementFormDefault='qualified'
+ blockDefault='#all' >
+
+ <xs:import
+ namespace='http://www.w3.org/2005/08/addressing'
+ schemaLocation='http://www.w3.org/2006/03/addressing/ws-addr.xsd' />
+
+ <xs:complexType name='Representation'>
+ <xs:sequence>
+ <xs:any minOccurs='0' processContents='lax'/>
+ </xs:sequence>
+ <xs:anyAttribute namespace='##other' processContents='lax'/>
+ </xs:complexType>
+
+ <xs:element name='Get'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any minOccurs='0' maxOccurs='unbounded' namespace='##other' processContents='lax' />
+ </xs:sequence>
+ <xs:attribute name='Dialect' type='xs:anyURI' use='optional' />
+ <xs:anyAttribute namespace='##other' processContents='lax' />
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name='GetResponse'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name='Representation' type='tns:Representation' minOccurs='0'/>
+ <xs:any minOccurs='1' maxOccurs='unbounded' namespace='##other' processContents='lax' />
+ </xs:sequence>
+ <xs:anyAttribute namespace='##other' processContents='lax' />
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name='Put'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name='Representation' type='tns:Representation' minOccurs='0'/>
+ <xs:any minOccurs='1' maxOccurs='unbounded' namespace='##other' processContents='lax' />
+ </xs:sequence>
+ <xs:attribute name='Dialect' type='xs:anyURI' use='optional' />
+ <xs:anyAttribute namespace='##other' processContents='lax' />
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name='PutResponse'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name='Representation' type='tns:Representation' minOccurs='0'/>
+ <xs:any minOccurs='1' namespace='##other' processContents='lax' />
+ </xs:sequence>
+ <xs:anyAttribute namespace='##other' processContents='lax' />
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name='Delete'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any minOccurs='0' maxOccurs='unbounded' namespace='##other' processContents='lax' />
+ </xs:sequence>
+ <xs:attribute name='Dialect' type='xs:anyURI' use='optional' />
+ <xs:anyAttribute namespace='##other' processContents='lax' />
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name='DeleteResponse'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any minOccurs='0' namespace='##other' processContents='lax' />
+ </xs:sequence>
+ <xs:anyAttribute namespace='##other' processContents='lax' />
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name='Create'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name='Representation' type='tns:Representation' minOccurs='0'/>
+ <xs:any minOccurs='0' maxOccurs='unbounded' namespace='##other' processContents='lax' />
+ </xs:sequence>
+ <xs:attribute name='Dialect' type='xs:anyURI' use='optional' />
+ <xs:anyAttribute namespace='##other' processContents='lax' />
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name='CreateResponse'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name='ResourceCreated' type='wsa:EndpointReferenceType' />
+ <xs:element name='Representation' type='tns:Representation' minOccurs='0'/>
+ <xs:any minOccurs='0' namespace='##other' processContents='lax' />
+ </xs:sequence>
+ <xs:anyAttribute namespace='##other' processContents='lax' />
+ </xs:complexType>
+ </xs:element>
+
+ <!-- Policy -->
+ <xs:complexType name='URI'>
+ <xs:simpleContent>
+ <xs:extension base='xs:anyURI'>
+ <xs:anyAttribute namespace='##other' processContents='lax'/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name='QName'>
+ <xs:simpleContent>
+ <xs:extension base='xs:QName'>
+ <xs:anyAttribute namespace='##other' processContents='lax'/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name='Empty'>
+ <xs:sequence/>
+ <xs:anyAttribute namespace='##other' processContents='lax'/>
+ </xs:complexType>
+
+ <xs:element name='TransferResource'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name='PutOperationSupported' type='tns:Empty'
+ minOccurs='0'/>
+ <xs:element name='DeleteOperationSupported' type='tns:Empty'
+ minOccurs='0'/>
+ <xs:element name='FaultOnPutDenied' type='tns:Empty' minOccurs='0'/>
+ <xs:element name='Dialect' minOccurs='0' maxOccurs='unbounded'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any namespace='##other' processContents='lax' minOccurs='0'
+ maxOccurs='0'/>
+ </xs:sequence>
+ <xs:attribute name='URI' type='xs:anyURI' use='required' />
+ <xs:anyAttribute namespace="##other" processContents='lax'/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name='Resource' type='tns:QName' minOccurs='0'/>
+ <xs:any namespace='##other' processContents='lax' minOccurs='0'
+ maxOccurs='unbounded'/>
+ </xs:sequence>
+ <xs:anyAttribute namespace='##other' processContents='lax' />
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name='TransferResourceFactory'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name='Resource' type='tns:QName' minOccurs='0'/>
+ <xs:element name='Dialect' minOccurs='0' maxOccurs='unbounded'>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any namespace='##other' processContents='lax' minOccurs='0'
+ maxOccurs='0'/>
+ </xs:sequence>
+ <xs:attribute name='URI' type='xs:anyURI' use='required' />
+ <xs:anyAttribute namespace="##other" processContents='lax'/>
+ </xs:complexType>
+ </xs:element>
+ <xs:any namespace='##other' processContents='lax' minOccurs='0'
+ maxOccurs='unbounded'/>
+ </xs:sequence>
+ <xs:anyAttribute namespace='##other' processContents='lax' />
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
http://git-wip-us.apache.org/repos/asf/cxf/blob/517ef67f/rt/ws/transfer/src/main/resources/schemas/ws-addr.xsd
----------------------------------------------------------------------
diff --git a/rt/ws/transfer/src/main/resources/schemas/ws-addr.xsd b/rt/ws/transfer/src/main/resources/schemas/ws-addr.xsd
new file mode 100644
index 0000000..05ca1bc
--- /dev/null
+++ b/rt/ws/transfer/src/main/resources/schemas/ws-addr.xsd
@@ -0,0 +1,141 @@
+<?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.
+-->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.w3.org/2005/08/addressing" targetNamespace="http://www.w3.org/2005/08/addressing" blockDefault="#all" elementFormDefault="qualified" finalDefault="" attributeFormDefault="unqualified">
+
+ <!-- Constructs from the WS-Addressing Core -->
+
+ <xs:element name="EndpointReference" type="tns:EndpointReferenceType"/>
+ <xs:complexType name="EndpointReferenceType" mixed="false">
+ <xs:sequence>
+ <xs:element name="Address" type="tns:AttributedURIType"/>
+ <xs:element ref="tns:ReferenceParameters" minOccurs="0"/>
+ <xs:element ref="tns:Metadata" minOccurs="0"/>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
+ </xs:complexType>
+
+ <xs:element name="ReferenceParameters" type="tns:ReferenceParametersType"/>
+ <xs:complexType name="ReferenceParametersType" mixed="false">
+ <xs:sequence>
+ <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
+ </xs:complexType>
+
+ <xs:element name="Metadata" type="tns:MetadataType"/>
+ <xs:complexType name="MetadataType" mixed="false">
+ <xs:sequence>
+ <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
+ </xs:complexType>
+
+ <xs:element name="MessageID" type="tns:AttributedURIType"/>
+ <xs:element name="RelatesTo" type="tns:RelatesToType"/>
+ <xs:complexType name="RelatesToType" mixed="false">
+ <xs:simpleContent>
+ <xs:extension base="xs:anyURI">
+ <xs:attribute name="RelationshipType" type="tns:RelationshipTypeOpenEnum" use="optional" default="http://www.w3.org/2005/08/addressing/reply"/>
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:simpleType name="RelationshipTypeOpenEnum">
+ <xs:union memberTypes="tns:RelationshipType xs:anyURI"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="RelationshipType">
+ <xs:restriction base="xs:anyURI">
+ <xs:enumeration value="http://www.w3.org/2005/08/addressing/reply"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="ReplyTo" type="tns:EndpointReferenceType"/>
+ <xs:element name="From" type="tns:EndpointReferenceType"/>
+ <xs:element name="FaultTo" type="tns:EndpointReferenceType"/>
+ <xs:element name="To" type="tns:AttributedURIType"/>
+ <xs:element name="Action" type="tns:AttributedURIType"/>
+
+ <xs:complexType name="AttributedURIType" mixed="false">
+ <xs:simpleContent>
+ <xs:extension base="xs:anyURI">
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <!-- Constructs from the WS-Addressing SOAP binding -->
+
+ <xs:attribute name="IsReferenceParameter" type="xs:boolean"/>
+
+ <xs:simpleType name="FaultCodesOpenEnumType">
+ <xs:union memberTypes="tns:FaultCodesType xs:QName"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="FaultCodesType">
+ <xs:restriction base="xs:QName">
+ <xs:enumeration value="tns:InvalidAddressingHeader"/>
+ <xs:enumeration value="tns:InvalidAddress"/>
+ <xs:enumeration value="tns:InvalidEPR"/>
+ <xs:enumeration value="tns:InvalidCardinality"/>
+ <xs:enumeration value="tns:MissingAddressInEPR"/>
+ <xs:enumeration value="tns:DuplicateMessageID"/>
+ <xs:enumeration value="tns:ActionMismatch"/>
+ <xs:enumeration value="tns:MessageAddressingHeaderRequired"/>
+ <xs:enumeration value="tns:DestinationUnreachable"/>
+ <xs:enumeration value="tns:ActionNotSupported"/>
+ <xs:enumeration value="tns:EndpointUnavailable"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="RetryAfter" type="tns:AttributedUnsignedLongType"/>
+ <xs:complexType name="AttributedUnsignedLongType" mixed="false">
+ <xs:simpleContent>
+ <xs:extension base="xs:unsignedLong">
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:element name="ProblemHeaderQName" type="tns:AttributedQNameType"/>
+ <xs:complexType name="AttributedQNameType" mixed="false">
+ <xs:simpleContent>
+ <xs:extension base="xs:QName">
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:element name="ProblemIRI" type="tns:AttributedURIType"/>
+
+ <xs:element name="ProblemAction" type="tns:ProblemActionType"/>
+ <xs:complexType name="ProblemActionType" mixed="false">
+ <xs:sequence>
+ <xs:element ref="tns:Action" minOccurs="0"/>
+ <xs:element name="SoapAction" minOccurs="0" type="xs:anyURI"/>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
+ </xs:complexType>
+
+</xs:schema>