blob: 4c9bd55588c6205c976a866bb1c4f0db8e1084d5 [file] [log] [blame]
/*
* 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.axis2.wsdl;
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.description.WSDL2Constants;
import javax.wsdl.Fault;
import javax.wsdl.Input;
import javax.wsdl.Output;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.AttributeExtensible;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLReader;
import javax.xml.namespace.QName;
/**
* Some utility methods for the WSDL users
*/
public class WSDLUtil {
/**
* returns whether the given mep uri is one of the
* input meps
*
* @param mep
*/
public static boolean isInputPresentForMEP(String mep) {
return WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(mep) ||
WSDL2Constants.MEP_URI_IN_ONLY.equals(mep) ||
WSDL2Constants.MEP_URI_IN_OUT.equals(mep) ||
WSDL2Constants.MEP_URI_OUT_IN.equals(mep) ||
WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(mep) ||
WSDL2Constants.MEP_URI_ROBUST_IN_ONLY.equals(mep);
}
/**
* returns whether the given mep URI is one of the output meps
*
* @param MEP
*/
public static boolean isOutputPresentForMEP(String MEP) {
return WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) ||
WSDL2Constants.MEP_URI_IN_OUT.equals(MEP) ||
WSDL2Constants.MEP_URI_OUT_IN.equals(MEP) ||
WSDL2Constants.MEP_URI_OUT_ONLY.equals(MEP) ||
WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) ||
WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP);
}
/**
* part names are not unique across messages. Hence
* we need some way of making the part name a unique
* one (due to the fact that the type mapper
* is a global list of types).
* The seemingly best way to do that is to
* specify a namespace for the part QName reference which
* is stored in the list. This part qname is
* temporary and should not be used with it's
* namespace URI (which happened to be the operation name)
* with _input (or a similar suffix) attached to it
*
* @param opName
* @param suffix
* @param partName
*/
public static QName getPartQName(String opName,
String suffix,
String partName) {
return new QName(opName + suffix, partName);
}
public static String getConstantFromHTTPLocation(String httpLocation, String httpMethod) {
if (httpLocation.charAt(0) != '?') {
httpLocation = "/" + httpLocation;
}
int index = httpLocation.indexOf("{");
if (index > -1) {
httpLocation = httpLocation.substring(0, index);
}
return httpMethod + httpLocation;
}
/**
* This method will return the EndPointName for a service with give transport protocol
* ex : StudentServiceHttpEndpoint
*
* @param serviceName
* @param protocol transport protocol
* @return
*/
public static String getEndpointName(String serviceName, String protocol) {
StringBuilder buffer = new StringBuilder();
buffer.append(serviceName);
buffer.append(protocol.substring(0, 1).toUpperCase());
buffer.append(protocol.substring(1, protocol.length()).toLowerCase());
buffer.append("Endpoint");
return buffer.toString();
}
/**
* Registers default extension attributes types to given <code>extensionRegistry</code> instance.
* <p>
* The method configures the following attributes of {@link Input}, {@link Output} and {@link Fault} WSDL elements
* to use {@link AttributeExtensible.STRING_TYPE}:
* <ul>
* <li>{http://www.w3.org/2005/08/addressing}Action</li>
* <li>{http://www.w3.org/2006/05/addressing/wsdl}Action</li>
* <li>{http://www.w3.org/2007/05/addressing/metadata}Action</li>
* <li>{http://schemas.xmlsoap.org/ws/2004/08/addressing}Action</li>
* </ul>
* </p>
* @param extensionRegistry The extension registry to add default extension attribute types to. Must not be null.
*/
public static void registerDefaultExtensionAttributeTypes(ExtensionRegistry extensionRegistry) {
if (extensionRegistry == null) {
throw new IllegalArgumentException("Extension registry must not be null");
}
QName finalWSANS = new QName(AddressingConstants.Final.WSA_NAMESPACE, AddressingConstants.WSA_ACTION);
extensionRegistry.registerExtensionAttributeType(Input.class, finalWSANS, AttributeExtensible.STRING_TYPE);
extensionRegistry.registerExtensionAttributeType(Output.class, finalWSANS, AttributeExtensible.STRING_TYPE);
extensionRegistry.registerExtensionAttributeType(Fault.class, finalWSANS, AttributeExtensible.STRING_TYPE);
QName finalWSAWNS = new QName(AddressingConstants.Final.WSAW_NAMESPACE, AddressingConstants.WSA_ACTION);
extensionRegistry.registerExtensionAttributeType(Input.class, finalWSAWNS, AttributeExtensible.STRING_TYPE);
extensionRegistry.registerExtensionAttributeType(Output.class, finalWSAWNS, AttributeExtensible.STRING_TYPE);
extensionRegistry.registerExtensionAttributeType(Fault.class, finalWSAWNS, AttributeExtensible.STRING_TYPE);
QName finalWSAMNS = new QName(AddressingConstants.Final.WSAM_NAMESPACE, AddressingConstants.WSA_ACTION);
extensionRegistry.registerExtensionAttributeType(Input.class, finalWSAMNS, AttributeExtensible.STRING_TYPE);
extensionRegistry.registerExtensionAttributeType(Output.class, finalWSAMNS, AttributeExtensible.STRING_TYPE);
extensionRegistry.registerExtensionAttributeType(Fault.class, finalWSAMNS, AttributeExtensible.STRING_TYPE);
QName submissionWSAWNS = new QName(AddressingConstants.Submission.WSA_NAMESPACE, AddressingConstants.WSA_ACTION);
extensionRegistry.registerExtensionAttributeType(Input.class, submissionWSAWNS, AttributeExtensible.STRING_TYPE);
extensionRegistry.registerExtensionAttributeType(Output.class, submissionWSAWNS, AttributeExtensible.STRING_TYPE);
extensionRegistry.registerExtensionAttributeType(Fault.class, submissionWSAWNS, AttributeExtensible.STRING_TYPE);
}
/**
* Creates a new WSDLReader and configures it with a {@link WSDLFactory#newPopulatedExtensionRegistry()} if it does not specify an extension registry.
* The method will register default extension attribute types in WSDLReader's {@link WSDLReader#getExtensionRegistry() extensionRegistry},
* see {@link #registerDefaultExtensionAttributeTypes(ExtensionRegistry)}.
*
* @return The newly created WSDLReader instance.
* @throws WSDLException
*/
public static WSDLReader newWSDLReaderWithPopulatedExtensionRegistry()
throws WSDLException {
WSDLFactory wsdlFactory = WSDLFactory.newInstance();
WSDLReader reader = wsdlFactory.newWSDLReader();
ExtensionRegistry extensionRegistry = reader.getExtensionRegistry();
if (extensionRegistry == null) {
extensionRegistry = wsdlFactory.newPopulatedExtensionRegistry();
}
WSDLUtil.registerDefaultExtensionAttributeTypes(extensionRegistry);
reader.setExtensionRegistry(extensionRegistry);
return reader;
}
}