001: /*
002: * BEGIN_HEADER - DO NOT EDIT
003: *
004: * The contents of this file are subject to the terms
005: * of the Common Development and Distribution License
006: * (the "License"). You may not use this file except
007: * in compliance with the License.
008: *
009: * You can obtain a copy of the license at
010: * https://open-esb.dev.java.net/public/CDDLv1.0.html.
011: * See the License for the specific language governing
012: * permissions and limitations under the License.
013: *
014: * When distributing Covered Code, include this CDDL
015: * HEADER in each file and include the License file at
016: * https://open-esb.dev.java.net/public/CDDLv1.0.html.
017: * If applicable add the following below this CDDL HEADER,
018: * with the fields enclosed by brackets "[]" replaced with
019: * your own identifying information: Portions Copyright
020: * [year] [name of copyright owner]
021: */
022:
023: /*
024: * @(#)WSDLInfo.java
025: * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
026: *
027: * END_HEADER - DO NOT EDIT
028: */
029: package com.sun.jbi.wsdl11wrapper.impl;
030:
031: import com.sun.jbi.wsdl11wrapper.impl.WrapperParserImpl;
032: import com.sun.jbi.wsdl11wrapper.impl.WrapperBuilderImpl;
033:
034: import java.util.Map;
035: import java.util.List;
036: import java.util.ArrayList;
037: import java.util.HashMap;
038: import java.util.Collections;
039:
040: import javax.xml.namespace.QName;
041:
042: import javax.wsdl.Message;
043: import javax.wsdl.Part;
044:
045: /**
046: * Holds (and may cache) WSDL information for use by the Wrapper Builders and Parsers
047: * @author aegloff
048: */
049: public class WSDLInfo {
050:
051: static Map cachedInfos = Collections.synchronizedMap(new HashMap());
052:
053: int msgPartCount;
054: QName messageType;
055: List orderedMessageParts;
056: List partsOrder = new ArrayList();
057:
058: /** Disallow instantiating this directly, use the getInstance factory method */
059: private WSDLInfo() {
060: }
061:
062: /**
063: * Factory method to get a WSDLInfo instance for a given message definition
064: * @param wsdlMessageDefinition the message definition to provide information about
065: * @return an instance with information regarding the wsdlMessageDefinitin passed in
066: */
067: public static WSDLInfo getInstance(Message wsdlMessageDefinition) {
068: WSDLInfo info = (WSDLInfo) cachedInfos
069: .get(wsdlMessageDefinition);
070: if (info == null) {
071: info = prepareInfo(wsdlMessageDefinition);
072: }
073: return info;
074: }
075:
076: /**
077: * @return the qualified name of the message
078: */
079: public QName getMessageType() {
080: return messageType;
081: }
082:
083: /**
084: * @return all the parts of the mssage, in the order they are defined in the message
085: */
086: public List getOrderedMessageParts() {
087: return orderedMessageParts;
088: }
089:
090: /**
091: * @return the name of all the message parts, in the order defined in the message
092: * Note that this is NOT the optional order defined in the binding
093: */
094: public List getPartsOrder() {
095: return partsOrder;
096: }
097:
098: /**
099: * Internal helper to extract the information regarding a message
100: */
101: static WSDLInfo prepareInfo(Message wsdlMessageDefinition) {
102: WSDLInfo info = new WSDLInfo();
103: List msgParts = wsdlMessageDefinition.getOrderedParts(null);
104: info.orderedMessageParts = msgParts;
105:
106: for (int partCount = 0; partCount < msgParts.size(); partCount++) {
107: Part currentPart = (Part) msgParts.get(partCount);
108: info.partsOrder.add(currentPart.getName());
109: }
110: info.msgPartCount = info.partsOrder.size();
111: info.messageType = wsdlMessageDefinition.getQName();
112:
113: cachedInfos.put(wsdlMessageDefinition, info);
114: return info;
115: }
116:
117: }
|