1 /*
   2  * Copyright (c) 1997, 2010, 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 }