/* | |
* 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.addressing.metadata; | |
import org.apache.axiom.om.OMAttribute; | |
import org.apache.axiom.om.OMFactory; | |
import org.apache.axiom.om.OMNamespace; | |
import org.apache.axis2.AxisFault; | |
import org.apache.commons.logging.Log; | |
import org.apache.commons.logging.LogFactory; | |
import javax.xml.namespace.QName; | |
public class WSDLLocation { | |
private static final Log log = LogFactory.getLog(WSDLLocation.class); | |
// Support both WSDLI namespaces on inbound messages to allow interop with earlier versions of axis2 | |
private static final QName WSDLI = new QName("http://www.w3.org/2006/01/wsdl-instance", "wsdlLocation", "wsdli"); | |
private static final QName FINAL_WSDLI = new QName("http://www.w3.org/ns/wsdl-instance", "wsdlLocation", "wsdli"); | |
private String targetNamespace; | |
private String wsdlURL; | |
public WSDLLocation() { | |
} | |
public WSDLLocation(String targetNamespace, String wsdlURL) { | |
this.targetNamespace = targetNamespace; | |
this.wsdlURL = wsdlURL; | |
} | |
public String getTargetNamespace() { | |
return targetNamespace; | |
} | |
public void setTargetNamespace(String targetNamespace) { | |
this.targetNamespace = targetNamespace; | |
} | |
public String getLocation() { | |
return wsdlURL; | |
} | |
public void setLocation(String wsdlURL) { | |
this.wsdlURL = wsdlURL; | |
} | |
/** | |
* Convenience method to convert an object of this type to an <code>OMAttribute</code> | |
* <p> | |
* <... xmlns:wsdli="http://www.w3.org/ns/wsdl-instance" wsdli:wsdlLocation="targetNamespace wsdlURL" ...> | |
* </p> | |
* @param factory <code>OMFactory</code> to use when generating <code>OMElement</code>s | |
* | |
* @return an <code>OMAttribute</code> that can be added to an <code>EndpointReference</code> | |
*/ | |
public OMAttribute toOM(OMFactory factory) { | |
String value = new StringBuffer(targetNamespace).append(" ").append(wsdlURL).toString(); | |
OMNamespace wsdliNs = factory.createOMNamespace(FINAL_WSDLI.getNamespaceURI(), FINAL_WSDLI.getPrefix()); | |
OMAttribute omAttribute = factory.createOMAttribute(FINAL_WSDLI.getLocalPart(), wsdliNs, value); | |
return omAttribute; | |
} | |
/** | |
* Convenience method for converting an OMAttribute to an instance of either of these types. | |
* <p> | |
* <... xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance" wsdli:wsdlLocation="targetNamespace wsdlURL" ...> | |
* </p> | |
* <p> | |
* <... xmlns:wsdli="http://www.w3.org/ns/wsdl-instance" wsdli:wsdlLocation="targetNamespace wsdlURL" ...> | |
* </p> | |
* @param omAttribute the <code>OMAttribute</code> that holds the wsdl location. | |
* @throws AxisFault | |
*/ | |
public void fromOM(OMAttribute omAttribute) throws AxisFault { | |
QName qname = omAttribute.getQName(); | |
if (WSDLI.equals(qname) || FINAL_WSDLI.equals(qname)) { | |
String value = omAttribute.getAttributeValue().trim(); | |
String[] values = value.split("\\s", 2); | |
//Don't set any values if split doesn't | |
//give us the correct number of elements. | |
if (values.length != 2) | |
return; | |
targetNamespace = values[0]; | |
wsdlURL = values[1]; | |
if (log.isDebugEnabled()) { | |
log.debug("fromOM: Extracted WSDLLocation targetNamespace = " + targetNamespace + " and wsdlURL = " + wsdlURL + " from an OMAttribute with QName = " + qname); | |
} | |
} | |
else { | |
throw new AxisFault("Unrecognized element."); | |
} | |
} | |
/** | |
* Static method to test whether an <code>OMElement</code> is recognized | |
* as a ServiceName element. If this method returns <code>true</code> then | |
* {@link #fromOM(OMAttribute)} is guaranteed not to throw an exception. | |
* | |
* @param omAttribute the <code>OMElement</code> to test. | |
* @return <code>true</code> if the element is a ServiceName element, | |
* <code>false</code> otherwise. | |
*/ | |
public static boolean isWSDLLocationAttribute(OMAttribute omAttribute) { | |
boolean result = false; | |
QName qname = omAttribute.getQName(); | |
if (WSDLI.equals(qname) || FINAL_WSDLI.equals(qname)) | |
result = true; | |
if (log.isDebugEnabled()) { | |
log.debug("isWSDLLocationAttribute: OMAttribute QName = " + qname + ", result = " + result); | |
} | |
return result; | |
} | |
} |