/**
* 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.discovery;
import java.util.HashMap;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.ws.Dispatch;
import org.apache.cxf.feature.StaxTransformFeature;
import org.apache.cxf.jaxws.DispatchImpl;
public abstract class WSDVersion {
public static final String NS_1_0 = "http://schemas.xmlsoap.org/ws/2005/04/discovery";
public static final String TO_1_0 = "urn:schemas-xmlsoap-org:ws:2005:04:discovery";
public static final String NS_1_1 = "http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01";
public static final String TO_1_1 = "urn:docs-oasis-open-org:ws-dd:ns:discovery:2009:01";
public static final WSDVersion INSTANCE_1_0 = new WSDVersion10();
public static final WSDVersion INSTANCE_1_1 = new WSDVersion11();
public abstract String getNamespace();
public abstract String getAddressingNamespace();
abstract String getToAddress();
abstract void addVersionTransformer(Dispatch<Object> dispatch);
abstract QName getServiceName();
public String getHelloAction() {
return getNamespace() + "/Hello";
}
public String getByeAction() {
return getNamespace() + "/Bye";
}
public String getProbeAction() {
return getNamespace() + "/Probe";
}
public String getResolveAction() {
return getNamespace() + "/Resolve";
}
static final class WSDVersion10 extends WSDVersion {
private WSDVersion10() {
}
public String getNamespace() {
return NS_1_0;
}
public String getToAddress() {
return TO_1_0;
}
public String getAddressingNamespace() {
return "http://schemas.xmlsoap.org/ws/2004/08/addressing";
}
public void addVersionTransformer(Dispatch<Object> dispatch) {
StaxTransformFeature feature = new StaxTransformFeature();
Map<String, String> outElements = new HashMap<>();
outElements.put("{" + NS_1_1 + "}*",
"{" + NS_1_0 + "}*");
outElements.put("{" + INSTANCE_1_1.getAddressingNamespace() + "}*",
"{" + getAddressingNamespace() + "}*");
feature.setOutTransformElements(outElements);
Map<String, String> inElements = new HashMap<>();
inElements.put("{" + NS_1_0 + "}*",
"{" + NS_1_1 + "}*");
inElements.put("{" + getAddressingNamespace() + "}*",
"{" + INSTANCE_1_1.getAddressingNamespace() + "}*");
feature.setInTransformElements(inElements);
feature.initialize(((DispatchImpl)dispatch).getClient(),
((DispatchImpl)dispatch).getClient().getBus());
Map<String, String> nsMap = new HashMap<>();
nsMap.put("tns", NS_1_0);
nsMap.put("wsa", getAddressingNamespace());
((DispatchImpl)dispatch).getClient().getEndpoint().getEndpointInfo()
.setProperty("soap.env.ns.map", nsMap);
}
public QName getServiceName() {
return new QName(NS_1_0, "DiscoveryProxy");
}
}
static final class WSDVersion11 extends WSDVersion {
private WSDVersion11() {
}
public String getNamespace() {
return NS_1_1;
}
public String getToAddress() {
return TO_1_1;
}
public String getAddressingNamespace() {
return "http://www.w3.org/2005/08/addressing";
}
public void addVersionTransformer(Dispatch<Object> dispatch) {
Map<String, String> nsMap = new HashMap<>();
nsMap.put("tns", NS_1_1);
nsMap.put("wsa", getAddressingNamespace());
((DispatchImpl)dispatch).getClient().getEndpoint().getEndpointInfo()
.setProperty("soap.env.ns.map", nsMap);
}
public QName getServiceName() {
return new QName(NS_1_1, "DiscoveryProxy");
}
}
}