1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
|
/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.ws.metadata.wsdl;
// $Id: WSDLInterfaceOperationPart.java 275 2006-05-04 21:36:29Z
// jason.greene@jboss.com $
import java.util.Collection;
import java.util.LinkedHashMap;
import javax.xml.namespace.QName;
import org.jboss.logging.Logger;
import org.jboss.ws.Constants;
import org.jboss.ws.WSException;
/**
* A Message Reference component associates a defined type with a message
* exchanged in an operation. By default, the type system is based upon the XML
* Infoset
*
* @author Thomas.Diesler@jboss.org
* @author <a href="mailto:jason.greene@jboss.com">Jason T. Greene</a>
* @since 10-Oct-2004
*/
public abstract class WSDLInterfaceMessageReference extends Extendable implements Comparable
{
// provide logging
protected Logger log = Logger.getLogger(getClass());
// The parent interface operation
private WSDLInterfaceOperation wsdlOperation;
/**
* The OPTIONAL messageLabel attribute information item identifies the role
* of this message in the message exchange pattern of the given operation
* element information item.
*/
private String messageLabel;
/**
* The OPTIONAL element attribute information item is the element declaration
* from the {element declarations} property resolved by the value of the
* element attribute information item, otherwise empty.
*/
private QName element;
/**
* Used mainly for WSDL 1.1 compatibility, indicates rpc parts.
* Although, this could be used to represent WSDL 2.0 RPC style.
*/
private LinkedHashMap<String, WSDLRPCPart> childParts = new LinkedHashMap<String, WSDLRPCPart>();
/**
* Used for WSDL 1.1
*/
private String partName;
/**
* Used for WSDL 1.1
*/
private QName messageName;
public WSDLInterfaceMessageReference(WSDLInterfaceOperation wsdlOperation)
{
log.trace("New part for wsdlOperation: " + wsdlOperation.getName());
this.wsdlOperation = wsdlOperation;
}
public WSDLInterfaceOperation getWsdlOperation()
{
return wsdlOperation;
}
public String getMessageLabel()
{
return messageLabel;
}
public void setMessageLabel(String messageLabel)
{
this.messageLabel = messageLabel;
}
public QName getElement()
{
return element;
}
public void setElement(QName element)
{
log.trace("setElement: " + element);
this.element = element;
}
/**
* Get the xmlType for this operation part.
*/
public QName getXMLType()
{
QName xmlType = null;
// First try to read it from the schema
WSDLDefinitions wsdlDefinitions = wsdlOperation.getWsdlInterface().getWsdlDefinitions();
WSDLTypes wsdlTypes = wsdlDefinitions.getWsdlTypes();
xmlType = wsdlTypes.getXMLType(element);
// Fall back to the property
if (xmlType == null)
{
WSDLProperty property = getProperty(Constants.WSDL_PROPERTY_PART_XMLTYPE);
if (property != null)
{
String qnameRef = property.getValue();
int colIndex = qnameRef.indexOf(':');
String prefix = qnameRef.substring(0, colIndex);
String localPart = qnameRef.substring(colIndex + 1);
String nsURI = wsdlDefinitions.getNamespaceURI(prefix);
xmlType = new QName(nsURI, localPart, prefix);
}
}
if (xmlType == null)
throw new WSException("Cannot obtain xmlType for element: " + element);
return xmlType;
}
/**
* Gets the child parts associated with this message reference. This is only
* used for RPC style, and currently only supported by WSDL 1.1.
*
* @return the list of rpc parts that make up the message
*/
public Collection<WSDLRPCPart> getChildParts()
{
return childParts.values();
}
/**
* Gets the child part associated with this message reference by part name.
* This is only used for RPC style, and currently only supported by WSDL 1.1.
*
* @param name the part name
* @return the part or null if not found
*/
public WSDLRPCPart getChildPart(String name)
{
return childParts.get(name);
}
/**
* Adds a child part to this mesage reference. This is only used for RPC
* style, and currently only supported by WSDL 1.1.
*
* @param childPart the list of rpc parts that make up the message
*/
public void addChildPart(WSDLRPCPart childPart)
{
this.childParts.put(childPart.getName(), childPart);
}
/**
* Removes a speficied child part. This is This is only used for RPC
* style, and currently only supported by WSDL 1.1.
*
* @param name the name of the part
*/
public void removeChildPart(String name)
{
this.childParts.remove(name);
}
/**
* Gets the WSDL 1.1 part name.
*
* @return the part name
*/
public String getPartName()
{
return partName;
}
/**
* Sets the WSDL 1.1 message name.
*
* @param messageName The part name
*/
public void setMessageName(QName messageName)
{
this.messageName = messageName;
}
/**
* Gets the WSDL 1.1 message name.
*
* @return the message name
*/
public QName getMessageName()
{
return messageName;
}
/**
* Sets the WSDL 1.1 part name.
*
* @param partName The part name
*/
public void setPartName(String partName)
{
this.partName = partName;
}
public int compareTo(Object o)
{
int c = -1;
if (o instanceof WSDLInterfaceMessageReference)
{
WSDLInterfaceMessageReference w = (WSDLInterfaceMessageReference) o;
String oname = w.getElement().getLocalPart();
String myname = getElement().getLocalPart();
c = myname.compareTo(oname);
}
return c;
}
}
|