View Javadoc
1   /*
2    * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.  Oracle designates this
8    * particular file as subject to the "Classpath" exception as provided
9    * by Oracle in the LICENSE file that accompanied this code.
10   *
11   * This code is distributed in the hope that it will be useful, but WITHOUT
12   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14   * version 2 for more details (a copy is included in the LICENSE file that
15   * accompanied this code).
16   *
17   * You should have received a copy of the GNU General Public License version
18   * 2 along with this work; if not, write to the Free Software Foundation,
19   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20   *
21   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22   * or visit www.oracle.com if you need additional information or have any
23   * questions.
24   */
25  
26  package com.sun.xml.internal.ws.api.model;
27  
28  import com.sun.istack.internal.NotNull;
29  import com.sun.xml.internal.bind.api.Bridge;
30  import com.sun.xml.internal.bind.api.JAXBRIContext;
31  import com.sun.xml.internal.bind.api.TypeReference;
32  import com.sun.xml.internal.ws.api.model.wsdl.WSDLPort;
33  import com.sun.xml.internal.ws.util.Pool;
34  
35  import javax.xml.bind.JAXBContext;
36  import javax.xml.namespace.QName;
37  import javax.xml.ws.Dispatch;
38  import javax.xml.ws.Provider;
39  import java.lang.reflect.Method;
40  import java.util.Collection;
41  
42  /**
43   * Represents abstraction of SEI.
44   *
45   * <p>
46   * This interface would be used to access which Java concepts correspond to
47   * which WSDL concepts, such as which <code>wsdl:port</code> corresponds to
48   * a SEI, or which <code>wsdl:operation</code> corresponds to {@link JavaMethod}.
49   *
50   * <P>
51   * It also retains information about the databinding done for a SEI;
52   * such as {@link JAXBRIContext} and {@link Bridge}.
53   *
54   * <p>
55   * This model is constructed only when there is a Java SEI. Therefore it's
56   * not available with {@link Dispatch} or {@link Provider}. Technologies that
57   * need to work regardless of such surface API difference shall not be using
58   * this model.
59   *
60   * @author Vivek Pandey
61   */
62  public interface SEIModel {
63      Pool.Marshaller getMarshallerPool();
64  
65      /**
66       * JAXBContext that will be used to marshall/unmarshall the java classes found in the SEI.
67       *
68       * @return the <code>{@link JAXBRIContext}</code>
69       * @deprecated Why do you need this?
70       */
71      JAXBContext getJAXBContext();
72  
73      /**
74       * Get the Bridge associated with the {@link TypeReference}
75       *
76       * @param type
77       * @return the <code>{@link Bridge}</code> for the <code>type</code>
78       */
79  //    Bridge getBridge(TypeReference type);
80  
81      /**
82       * Its a known fault if the exception thrown by {@link Method} is annotated with the
83       * {@link javax.xml.ws.WebFault#name()} thas equal to the name passed as parameter.
84       *
85       * @param name   is the qualified name of fault detail element as specified by wsdl:fault@element value.
86       * @param method is the Java {@link Method}
87       * @return true if <code>name</code> is the name
88       *         of a known fault name for the <code>method</code>
89       */
90  //    boolean isKnownFault(QName name, Method method);
91  
92      /**
93       * Checks if the {@link JavaMethod} for the {@link Method} knowns the exception class.
94       *
95       * @param m  {@link Method} to pickup the right {@link JavaMethod} model
96       * @param ex exception class
97       * @return true if <code>ex</code> is a Checked Exception
98       *         for <code>m</code>
99       */
100 //    boolean isCheckedException(Method m, Class ex);
101 
102     /**
103      * This method will be useful to get the {@link JavaMethod} corrrespondiong to
104      * a {@link Method} - such as on the client side.
105      *
106      * @param method for which {@link JavaMethod} is asked for
107      * @return the {@link JavaMethod} representing the <code>method</code>
108      */
109     JavaMethod getJavaMethod(Method method);
110 
111     /**
112      * Gives a {@link JavaMethod} for a given {@link QName}. The {@link QName} will
113      * be equivalent to the SOAP Body or Header block or can simply be the name of an
114      * infoset that corresponds to the payload.
115      * @param name
116      * @return the <code>JavaMethod</code> associated with the
117      *         operation named name
118      */
119     public JavaMethod getJavaMethod(QName name);
120 
121     /**
122      * Gives the JavaMethod associated with the wsdl operation
123      * @param operationName QName of the wsdl operation
124      * @return
125      */
126     public JavaMethod getJavaMethodForWsdlOperation(QName operationName);
127 
128 
129     /**
130      * Gives all the {@link JavaMethod} for a wsdl:port for which this {@link SEIModel} is
131      * created.
132      *
133      * @return a {@link Collection} of {@link JavaMethod}
134      *         associated with the {@link SEIModel}
135      */
136     Collection<? extends JavaMethod> getJavaMethods();
137 
138     /**
139      * Location of the WSDL that defines the port associated with the {@link SEIModel}
140      *
141      * @return wsdl location uri - always non-null
142      */
143     @NotNull String getWSDLLocation();
144 
145     /**
146      * wsdl:service qualified name for the port associated with the {@link SEIModel}
147      *
148      * @return wsdl:service@name value - always non-null
149      */
150     @NotNull QName getServiceQName();
151 
152     /**
153      * Gets the {@link WSDLPort} that represents the port that this SEI binds to.
154      */
155     @NotNull WSDLPort getPort();
156 
157     /**
158      * Value of the wsdl:port name associated with the {@link SEIModel}
159      *
160      * @return wsdl:service/wsdl:port@name value, always non-null
161      */
162     @NotNull QName getPortName();
163 
164     /**
165      * Value of wsdl:portType bound to the port associated with the {@link SEIModel}
166      *
167      * @return
168      */
169     @NotNull QName getPortTypeName();
170 
171     /**
172      *  Gives the wsdl:binding@name value
173      */
174     @NotNull QName getBoundPortTypeName();
175 
176     /**
177      * Namespace of the wsd;:port associated with the {@link SEIModel}
178      */
179     @NotNull String getTargetNamespace();
180 }