feat(jdk8): move files to new folder to avoid resources compiled.

This commit is contained in:
2025-09-07 15:25:52 +08:00
parent 3f0047bf6f
commit 8c35cfb1c0
17415 changed files with 217 additions and 213 deletions

View File

@@ -0,0 +1,147 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* The <code>Action</code> annotation allows explicit association of a
* WS-Addressing <code>Action</code> message addressing property with
* <code>input</code>, <code>output</code>, and
* <code>fault</code> messages of the mapped WSDL operation.
* <p>
* This annotation can be specified on each method of a service endpoint interface.
* For such a method, the mapped operation in the generated WSDL's
* <code>wsam:Action</code> attribute on the WSDL <code>input</code>,
* <code>output</code> and <code>fault</code> messages of the WSDL <code>operation</code>
* is based upon which attributes of the <code>Action</code> annotation have been specified.
* For the exact computation of <code>wsam:Action</code> values for the messages, refer
* to the algorithm in the JAX-WS specification.
* <p>
* <b>Example 1</b>: Specify explicit values for <code>Action</code> message addressing property
* for <code>input</code> and <code>output</code> messages.
*
* <pre>
* &#64;WebService(targetNamespace="http://example.com/numbers")
* public class AddNumbersImpl {
* <b>&#64;Action(
* input="http://example.com/inputAction",
* output="http://example.com/outputAction")</b>
* public int addNumbers(int number1, int number2) {
* return number1 + number2;
* }
* }
* </pre>
*
* The generated WSDL looks like:
* <pre>
* &lt;definitions targetNamespace="http://example.com/numbers" ...>
* ...
* &lt;portType name="AddNumbersPortType">
* &lt;operation name="AddNumbers">
* &lt;input message="tns:AddNumbersInput" name="foo"
* <b>wsam:Action="http://example.com/inputAction"</b>/>
* &lt;output message="tns:AddNumbersOutput" name="bar"
* <b>wsam:Action="http://example.com/outputAction"</b>/>
* &lt;/operation>
* &lt;/portType>
* ...
* &lt;/definitions>
* </pre>
*
* <p>
* <b>Example 2</b>: Specify explicit value for <code>Action</code> message addressing property
* for only the <code>input</code> message. The <code>wsam:Action</code> values for the
* WSDL <code>output</code> message are computed using the algorithm in the JAX-WS specification.
*
* <pre>
* &#64;WebService(targetNamespace="http://example.com/numbers")
* public class AddNumbersImpl {
* <b>&#64;Action(input="http://example.com/inputAction")</b>
* public int addNumbers(int number1, int number2) {
* return number1 + number2;
* }
* }
* </pre>
*
* The generated WSDL looks like:
* <pre>
* &lt;definitions targetNamespace="http://example.com/numbers" ...>
* ...
* &lt;portType name="AddNumbersPortType">
* &lt;operation name="AddNumbers">
* &lt;input message="tns:AddNumbersInput" name="foo"
* <b>wsam:Action="http://example.com/inputAction"</b> />
* &lt;output message="tns:AddNumbersOutput" name="bar"
* <b>wsam:Action="http://example.com/numbers/AddNumbersPortType/AddNumbersResponse"</b>/>
* &lt;/operation>
* &lt;/portType>
* ...
* &lt;/definitions>
* </pre>
*
* It is legitimate to specify an explicit value for <code>Action</code> message addressing property for
* <code>output</code> message only. In this case, <code>wsam:Action</code> value for the
* WSDL <code>input</code> message is computed using the algorithm in the JAX-WS specification.
*
* <p>
* <b>Example 3</b>: See {@link FaultAction} annotation for an example of
* how to specify an explicit value for <code>Action</code> message addressing property for the
* <code>fault</code> message.
*
* @see FaultAction
*
* @since JAX-WS 2.1
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Action {
/**
* Explicit value of the WS-Addressing <code>Action</code> message addressing property for the <code>input</code>
* message of the operation.
*/
String input() default "";
/**
* Explicit value of the WS-Addressing <code>Action</code> message addressing property for the <code>output</code>
* message of the operation.
*/
String output() default "";
/**
* Explicit value of the WS-Addressing <code>Action</code> message addressing property for the <code>fault</code>
* message(s) of the operation. Each exception that is mapped to a fault and requires an explicit WS-Addressing
* <code>Action</code> message addressing property, needs to be specified as a value in this property
* using {@link FaultAction} annotation.
*/
FaultAction[] fault() default { };
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
/** The <code>AsyncHandler</code> interface is implemented by
* clients that wish to receive callback notification of the completion of
* service endpoint operations invoked asynchronously.
*
* @since JAX-WS 2.0
**/
public interface AsyncHandler<T> {
/** Called when the response to an asynchronous operation is available.
*
* @param res The response to the operation invocation.
*
**/
void handleResponse(Response<T> res);
}

View File

@@ -0,0 +1,67 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
/** The <code>Binding</code> interface is the base interface
* for JAX-WS protocol bindings.
*
* @since JAX-WS 2.0
**/
public interface Binding {
/**
* Gets a copy of the handler chain for a protocol binding instance.
* If the returned chain is modified a call to <code>setHandlerChain</code>
* is required to configure the binding instance with the new chain.
*
* @return java.util.List&lt;Handler> Handler chain
*/
public java.util.List<javax.xml.ws.handler.Handler> getHandlerChain();
/**
* Sets the handler chain for the protocol binding instance.
*
* @param chain A List of handler configuration entries
* @throws WebServiceException On an error in the configuration of
* the handler chain
* @throws java.lang.UnsupportedOperationException If this
* operation is not supported. This may be done to
* avoid any overriding of a pre-configured handler
* chain.
*/
public void setHandlerChain(java.util.List<javax.xml.ws.handler.Handler> chain);
/**
* Get the URI for this binding instance.
*
* @return String The binding identifier for the port.
* Never returns <code>null</code>
*
* @since JAX-WS 2.1
*/
String getBindingID();
}

View File

@@ -0,0 +1,182 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.util.Map;
import javax.xml.ws.wsaddressing.W3CEndpointReference;
/**
* The <code>BindingProvider</code> interface provides access to the
* protocol binding and associated context objects for request and
* response message processing.
*
* @since JAX-WS 2.0
*
* @see javax.xml.ws.Binding
**/
public interface BindingProvider {
/**
* Standard property: User name for authentication.
* <p>Type: <code>java.lang.String</code>
**/
public static final String USERNAME_PROPERTY =
"javax.xml.ws.security.auth.username";
/**
* Standard property: Password for authentication.
* <p>Type: <code>java.lang.String</code>
**/
public static final String PASSWORD_PROPERTY =
"javax.xml.ws.security.auth.password";
/**
* Standard property: Target service endpoint address. The
* URI scheme for the endpoint address specification MUST
* correspond to the protocol/transport binding for the
* binding in use.
* <p>Type: <code>java.lang.String</code>
**/
public static final String ENDPOINT_ADDRESS_PROPERTY =
"javax.xml.ws.service.endpoint.address";
/**
* Standard property: This boolean property is used by a service
* client to indicate whether or not it wants to participate in
* a session with a service endpoint. If this property is set to
* <code>true</code>, the service client indicates that it wants the session
* to be maintained. If set to <code>false</code>, the session is not maintained.
* The default value for this property is <code>false</code>.
* <p>Type: <code>java.lang.Boolean</code>
**/
public static final String SESSION_MAINTAIN_PROPERTY =
"javax.xml.ws.session.maintain";
/**
* Standard property for SOAPAction. This boolean property
* indicates whether or not the value of the
* <code>javax.xml.ws.soap.http.soapaction.uri</code> property
* is used for the value of the SOAPAction. The
* default value of this property is <code>false</code> indicating
* that the
* <code>javax.xml.ws.soap.http.soapaction.uri</code> property
* is not used for the value of the SOAPAction, however,
* if WS-Addressing is enabled, the default value is
* <code>true</code>.
*
* <p>Type: <code>java.lang.Boolean</code>
**/
public static final String SOAPACTION_USE_PROPERTY =
"javax.xml.ws.soap.http.soapaction.use";
/**
* Standard property for SOAPAction. Indicates the SOAPAction
* URI if the <code>javax.xml.ws.soap.http.soapaction.use</code>
* property is set to <code>true</code>. If WS-Addressing
* is enabled, this value will also be used for the value of the
* WS-Addressing Action header. If this property is not set,
* the default SOAPAction and WS-Addressing Action will be sent.
*
* <p>Type: <code>java.lang.String</code>
**/
public static final String SOAPACTION_URI_PROPERTY =
"javax.xml.ws.soap.http.soapaction.uri";
/**
* Get the context that is used to initialize the message context
* for request messages.
*
* Modifications to the request context do not affect the message context of
* either synchronous or asynchronous operations that have already been
* started.
*
* @return The context that is used in processing request messages.
**/
Map<String, Object> getRequestContext();
/**
* Get the context that resulted from processing a response message.
*
* The returned context is for the most recently completed synchronous
* operation. Subsequent synchronous operation invocations overwrite the
* response context. Asynchronous operations return their response context
* via the Response interface.
*
* @return The context that resulted from processing the latest
* response messages.
**/
Map<String, Object> getResponseContext();
/**
* Get the Binding for this binding provider.
*
* @return The Binding for this binding provider.
**/
Binding getBinding();
/**
* Returns the <code>EndpointReference</code> associated with
* this <code>BindingProvider</code> instance.
* <p>
* If the Binding for this <code>bindingProvider</code> is
* either SOAP1.1/HTTP or SOAP1.2/HTTP, then a
* <code>W3CEndpointReference</code> MUST be returned.
*
* @return EndpointReference of the target endpoint associated with this
* <code>BindingProvider</code> instance.
*
* @throws java.lang.UnsupportedOperationException If this
* <code>BindingProvider</code> uses the XML/HTTP binding.
*
* @see W3CEndpointReference
*
* @since JAX-WS 2.1
*/
public EndpointReference getEndpointReference();
/**
* Returns the <code>EndpointReference</code> associated with
* this <code>BindingProvider</code> instance. The instance
* returned will be of type <code>clazz</code>.
*
* @param clazz Specifies the type of <code>EndpointReference</code>
* that MUST be returned.
* @return EndpointReference of the target endpoint associated with this
* <code>BindingProvider</code> instance. MUST be of type
* <code>clazz</code>.
* @throws WebServiceException If the Class <code>clazz</code>
* is not supported by this implementation.
* @throws java.lang.UnsupportedOperationException If this
* <code>BindingProvider</code> uses the XML/HTTP binding.
*
* @since JAX-WS 2.1
*/
public <T extends EndpointReference> T getEndpointReference(Class<T> clazz);
}

View File

@@ -0,0 +1,62 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* The <code>BindingType</code> annotation is used to
* specify the binding to use for a web service
* endpoint implementation class.
* <p>
* This annotation may be overriden programmatically or via
* deployment descriptors, depending on the platform in use.
*
* @since JAX-WS 2.0
*
**/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface BindingType {
/**
* A binding identifier (a URI).
* If not specified, the default is the SOAP 1.1 / HTTP binding.
* <p>
* See the <code>SOAPBinding</code> and <code>HTTPBinding</code>
* for the definition of the standard binding identifiers.
*
* @see javax.xml.ws.Binding
* @see javax.xml.ws.soap.SOAPBinding#SOAP11HTTP_BINDING
* @see javax.xml.ws.soap.SOAPBinding#SOAP12HTTP_BINDING
* @see javax.xml.ws.http.HTTPBinding#HTTP_BINDING
*/
String value() default "" ;
}

View File

@@ -0,0 +1,116 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.util.concurrent.Future;
/** The <code>Dispatch</code> interface provides support
* for the dynamic invocation of a service endpoint operations. The
* <code>javax.xml.ws.Service</code>
* class acts as a factory for the creation of <code>Dispatch</code>
* instances.
*
* @since JAX-WS 2.0
**/
public interface Dispatch<T> extends BindingProvider {
/** Invoke a service operation synchronously.
*
* The client is responsible for ensuring that the <code>msg</code> object
* when marshalled is formed according to the requirements of the protocol
* binding in use.
*
* @param msg An object that will form the message or payload of
* the message used to invoke the operation.
* @return The response message or message payload to the
* operation invocation.
* @throws WebServiceException If a fault occurs during communication with
* the service
* @throws WebServiceException If there is any error in the configuration of
* the <code>Dispatch</code> instance
**/
public T invoke(T msg);
/** Invoke a service operation asynchronously. The
* method returns without waiting for the response to the operation
* invocation, the results of the operation are obtained by polling the
* returned <code>Response</code>.
* <p>
* The client is responsible for ensuring that the <code>msg</code> object
* when marshalled is formed according to the requirements of the protocol
* binding in use.
*
* @param msg An object that will form the message or payload of
* the message used to invoke the operation.
* @return The response message or message payload to the
* operation invocation.
* @throws WebServiceException If there is any error in the configuration of
* the <code>Dispatch</code> instance
**/
public Response<T> invokeAsync(T msg);
/** Invoke a service operation asynchronously. The
* method returns without waiting for the response to the operation
* invocation, the results of the operation are communicated to the client
* via the passed in <code>handler</code>.
* <p>
* The client is responsible for ensuring that the <code>msg</code> object
* when marshalled is formed according to the requirements of the protocol
* binding in use.
*
* @param msg An object that will form the message or payload of
* the message used to invoke the operation.
* @param handler The handler object that will receive the
* response to the operation invocation.
* @return A <code>Future</code> object that may be used to check the status
* of the operation invocation. This object MUST NOT be used to try to
* obtain the results of the operation - the object returned from
* <code>Future&lt;?>.get()</code> is implementation dependent
* and any use of it will result in non-portable behaviour.
* @throws WebServiceException If there is any error in the configuration of
* the <code>Dispatch</code> instance
**/
public Future<?> invokeAsync(T msg, AsyncHandler<T> handler);
/** Invokes a service operation using the one-way
* interaction mode. The operation invocation is logically non-blocking,
* subject to the capabilities of the underlying protocol, no results
* are returned. When
* the protocol in use is SOAP/HTTP, this method MUST block until
* an HTTP response code has been received or an error occurs.
* <p>
* The client is responsible for ensuring that the <code>msg</code> object
* when marshalled is formed according to the requirements of the protocol
* binding in use.
*
* @param msg An object that will form the message or payload of
* the message used to invoke the operation.
* @throws WebServiceException If there is any error in the configuration of
* the <code>Dispatch</code> instance or if an error occurs during the
* invocation.
**/
public void invokeOneWay(T msg);
}

View File

@@ -0,0 +1,498 @@
/*
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.util.List;
import java.util.Map;
import javax.xml.ws.spi.Provider;
import javax.xml.ws.spi.http.HttpContext;
import javax.xml.ws.wsaddressing.W3CEndpointReference;
import org.w3c.dom.Element;
/**
* A Web service endpoint.
*
* <p>Endpoints are created using the static methods defined in this
* class. An endpoint is always tied to one <code>Binding</code>
* and one implementor, both set at endpoint creation time.
*
* <p>An endpoint is either in a published or an unpublished state.
* The <code>publish</code> methods can be used to start publishing
* an endpoint, at which point it starts accepting incoming requests.
* Conversely, the <code>stop</code> method can be used to stop
* accepting incoming requests and take the endpoint down.
* Once stopped, an endpoint cannot be published again.
*
* <p>An <code>Executor</code> may be set on the endpoint in order
* to gain better control over the threads used to dispatch incoming
* requests. For instance, thread pooling with certain parameters
* can be enabled by creating a <code>ThreadPoolExecutor</code> and
* registering it with the endpoint.
*
* <p>Handler chains can be set using the contained <code>Binding</code>.
*
* <p>An endpoint may have a list of metadata documents, such as WSDL
* and XMLSchema documents, bound to it. At publishing time, the
* JAX-WS implementation will try to reuse as much of that metadata
* as possible instead of generating new ones based on the annotations
* present on the implementor.
*
* @since JAX-WS 2.0
*
* @see javax.xml.ws.Binding
* @see javax.xml.ws.BindingType
* @see javax.xml.ws.soap.SOAPBinding
* @see java.util.concurrent.Executor
*
**/
public abstract class Endpoint {
/** Standard property: name of WSDL service.
* <p>Type: javax.xml.namespace.QName
**/
public static final String WSDL_SERVICE = "javax.xml.ws.wsdl.service";
/** Standard property: name of WSDL port.
* <p>Type: javax.xml.namespace.QName
**/
public static final String WSDL_PORT = "javax.xml.ws.wsdl.port";
/**
* Creates an endpoint with the specified implementor object. If there is
* a binding specified via a BindingType annotation then it MUST be used else
* a default of SOAP 1.1 / HTTP binding MUST be used.
* <p>
* The newly created endpoint may be published by calling
* one of the {@link javax.xml.ws.Endpoint#publish(String)} and
* {@link javax.xml.ws.Endpoint#publish(Object)} methods.
*
*
* @param implementor The endpoint implementor.
*
* @return The newly created endpoint.
*
**/
public static Endpoint create(Object implementor) {
return create(null, implementor);
}
/**
* Creates an endpoint with the specified implementor object and web
* service features. If there is a binding specified via a BindingType
* annotation then it MUST be used else a default of SOAP 1.1 / HTTP
* binding MUST be used.
* <p>
* The newly created endpoint may be published by calling
* one of the {@link javax.xml.ws.Endpoint#publish(String)} and
* {@link javax.xml.ws.Endpoint#publish(Object)} methods.
*
*
* @param implementor The endpoint implementor.
* @param features A list of WebServiceFeature to configure on the
* endpoint. Supported features not in the <code>features
* </code> parameter will have their default values.
*
*
* @return The newly created endpoint.
* @since JAX-WS 2.2
*
*/
public static Endpoint create(Object implementor, WebServiceFeature ... features) {
return create(null, implementor, features);
}
/**
* Creates an endpoint with the specified binding type and
* implementor object.
* <p>
* The newly created endpoint may be published by calling
* one of the {@link javax.xml.ws.Endpoint#publish(String)} and
* {@link javax.xml.ws.Endpoint#publish(Object)} methods.
*
* @param bindingId A URI specifying the binding to use. If the bindingID is
* <code>null</code> and no binding is specified via a BindingType
* annotation then a default SOAP 1.1 / HTTP binding MUST be used.
*
* @param implementor The endpoint implementor.
*
* @return The newly created endpoint.
*
**/
public static Endpoint create(String bindingId, Object implementor) {
return Provider.provider().createEndpoint(bindingId, implementor);
}
/**
* Creates an endpoint with the specified binding type,
* implementor object, and web service features.
* <p>
* The newly created endpoint may be published by calling
* one of the {@link javax.xml.ws.Endpoint#publish(String)} and
* {@link javax.xml.ws.Endpoint#publish(Object)} methods.
*
* @param bindingId A URI specifying the binding to use. If the bindingID is
* <code>null</code> and no binding is specified via a BindingType
* annotation then a default SOAP 1.1 / HTTP binding MUST be used.
*
* @param implementor The endpoint implementor.
*
* @param features A list of WebServiceFeature to configure on the
* endpoint. Supported features not in the <code>features
* </code> parameter will have their default values.
*
* @return The newly created endpoint.
* @since JAX-WS 2.2
*/
public static Endpoint create(String bindingId, Object implementor, WebServiceFeature ... features) {
return Provider.provider().createEndpoint(bindingId, implementor, features);
}
/**
* Returns the binding for this endpoint.
*
* @return The binding for this endpoint
**/
public abstract Binding getBinding();
/**
* Returns the implementation object for this endpoint.
*
* @return The implementor for this endpoint
**/
public abstract Object getImplementor();
/**
* Publishes this endpoint at the given address.
* The necessary server infrastructure will be created and
* configured by the JAX-WS implementation using some default configuration.
* In order to get more control over the server configuration, please
* use the {@link javax.xml.ws.Endpoint#publish(Object)} method instead.
*
* @param address A URI specifying the address to use. The address
* MUST be compatible with the binding specified at the
* time the endpoint was created.
*
* @throws java.lang.IllegalArgumentException
* If the provided address URI is not usable
* in conjunction with the endpoint's binding.
*
* @throws java.lang.IllegalStateException
* If the endpoint has been published already or it has been stopped.
*
* @throws java.lang.SecurityException
* If a <code>java.lang.SecurityManger</code>
* is being used and the application doesn't have the
* <code>WebServicePermission("publishEndpoint")</code> permission.
**/
public abstract void publish(String address);
/**
* Creates and publishes an endpoint for the specified implementor
* object at the given address.
* <p>
* The necessary server infrastructure will be created and
* configured by the JAX-WS implementation using some default configuration.
*
* In order to get more control over the server configuration, please
* use the {@link javax.xml.ws.Endpoint#create(String,Object)} and
* {@link javax.xml.ws.Endpoint#publish(Object)} methods instead.
*
* @param address A URI specifying the address and transport/protocol
* to use. A http: URI MUST result in the SOAP 1.1/HTTP
* binding being used. Implementations may support other
* URI schemes.
* @param implementor The endpoint implementor.
*
* @return The newly created endpoint.
*
* @throws java.lang.SecurityException
* If a <code>java.lang.SecurityManger</code>
* is being used and the application doesn't have the
* <code>WebServicePermission("publishEndpoint")</code> permission.
*
**/
public static Endpoint publish(String address, Object implementor) {
return Provider.provider().createAndPublishEndpoint(address, implementor);
}
/**
* Creates and publishes an endpoint for the specified implementor
* object at the given address. The created endpoint is configured
* with the web service features.
* <p>
* The necessary server infrastructure will be created and
* configured by the JAX-WS implementation using some default configuration.
*
* In order to get more control over the server configuration, please
* use the {@link javax.xml.ws.Endpoint#create(String,Object)} and
* {@link javax.xml.ws.Endpoint#publish(Object)} methods instead.
*
* @param address A URI specifying the address and transport/protocol
* to use. A http: URI MUST result in the SOAP 1.1/HTTP
* binding being used. Implementations may support other
* URI schemes.
* @param implementor The endpoint implementor.
* @param features A list of WebServiceFeature to configure on the
* endpoint. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return The newly created endpoint.
*
* @throws java.lang.SecurityException
* If a <code>java.lang.SecurityManger</code>
* is being used and the application doesn't have the
* <code>WebServicePermission("publishEndpoint")</code> permission.
* @since JAX-WS 2.2
*/
public static Endpoint publish(String address, Object implementor, WebServiceFeature ... features) {
return Provider.provider().createAndPublishEndpoint(address, implementor, features);
}
/**
* Publishes this endpoint at the provided server context.
* A server context encapsulates the server infrastructure
* and addressing information for a particular transport.
* For a call to this method to succeed, the server context
* passed as an argument to it MUST be compatible with the
* endpoint's binding.
*
* @param serverContext An object representing a server
* context to be used for publishing the endpoint.
*
* @throws java.lang.IllegalArgumentException
* If the provided server context is not
* supported by the implementation or turns
* out to be unusable in conjunction with the
* endpoint's binding.
*
* @throws java.lang.IllegalStateException
* If the endpoint has been published already or it has been stopped.
*
* @throws java.lang.SecurityException
* If a <code>java.lang.SecurityManger</code>
* is being used and the application doesn't have the
* <code>WebServicePermission("publishEndpoint")</code> permission.
**/
public abstract void publish(Object serverContext);
/**
* Publishes this endpoint at the provided server context.
* A server context encapsulates the server infrastructure
* and addressing information for a particular transport.
* For a call to this method to succeed, the server context
* passed as an argument to it MUST be compatible with the
* endpoint's binding.
*
* <p>
* This is meant for container developers to publish the
* the endpoints portably and not intended for the end
* developers.
*
*
* @param serverContext An object representing a server
* context to be used for publishing the endpoint.
*
* @throws java.lang.IllegalArgumentException
* If the provided server context is not
* supported by the implementation or turns
* out to be unusable in conjunction with the
* endpoint's binding.
*
* @throws java.lang.IllegalStateException
* If the endpoint has been published already or it has been stopped.
*
* @throws java.lang.SecurityException
* If a <code>java.lang.SecurityManger</code>
* is being used and the application doesn't have the
* <code>WebServicePermission("publishEndpoint")</code> permission.
* @since JAX-WS 2.2
*/
public void publish(HttpContext serverContext) {
throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
}
/**
* Stops publishing this endpoint.
*
* If the endpoint is not in a published state, this method
* has no effect.
*
**/
public abstract void stop();
/**
* Returns true if the endpoint is in the published state.
*
* @return <code>true</code> if the endpoint is in the published state.
**/
public abstract boolean isPublished();
/**
* Returns a list of metadata documents for the service.
*
* @return <code>List&lt;javax.xml.transform.Source&gt;</code> A list of metadata documents for the service
**/
public abstract List<javax.xml.transform.Source> getMetadata();
/**
* Sets the metadata for this endpoint.
*
* @param metadata A list of XML document sources containing
* metadata information for the endpoint (e.g.
* WSDL or XML Schema documents)
*
* @throws java.lang.IllegalStateException If the endpoint
* has already been published.
**/
public abstract void setMetadata(List<javax.xml.transform.Source> metadata);
/**
* Returns the executor for this <code>Endpoint</code>instance.
*
* The executor is used to dispatch an incoming request to
* the implementor object.
*
* @return The <code>java.util.concurrent.Executor</code> to be
* used to dispatch a request.
*
* @see java.util.concurrent.Executor
**/
public abstract java.util.concurrent.Executor getExecutor();
/**
* Sets the executor for this <code>Endpoint</code> instance.
*
* The executor is used to dispatch an incoming request to
* the implementor object.
*
* If this <code>Endpoint</code> is published using the
* <code>publish(Object)</code> method and the specified server
* context defines its own threading behavior, the executor
* may be ignored.
*
* @param executor The <code>java.util.concurrent.Executor</code>
* to be used to dispatch a request.
*
* @throws SecurityException If the instance does not support
* setting an executor for security reasons (e.g. the
* necessary permissions are missing).
*
* @see java.util.concurrent.Executor
**/
public abstract void setExecutor(java.util.concurrent.Executor executor);
/**
* Returns the property bag for this <code>Endpoint</code> instance.
*
* @return Map&lt;String,Object&gt; The property bag
* associated with this instance.
**/
public abstract Map<String,Object> getProperties();
/**
* Sets the property bag for this <code>Endpoint</code> instance.
*
* @param properties The property bag associated with
* this instance.
**/
public abstract void setProperties(Map<String,Object> properties);
/**
* Returns the <code>EndpointReference</code> associated with
* this <code>Endpoint</code> instance.
* <p>
* If the Binding for this <code>bindingProvider</code> is
* either SOAP1.1/HTTP or SOAP1.2/HTTP, then a
* <code>W3CEndpointReference</code> MUST be returned.
*
* @param referenceParameters Reference parameters to be associated with the
* returned <code>EndpointReference</code> instance.
* @return EndpointReference of this <code>Endpoint</code> instance.
* If the returned <code>EndpointReference</code> is of type
* <code>W3CEndpointReference</code> then it MUST contain the
* the specified <code>referenceParameters</code>.
* @throws WebServiceException If any error in the creation of
* the <code>EndpointReference</code> or if the <code>Endpoint</code> is
* not in the published state.
* @throws UnsupportedOperationException If this <code>BindingProvider</code>
* uses the XML/HTTP binding.
*
* @see W3CEndpointReference
*
* @since JAX-WS 2.1
**/
public abstract EndpointReference getEndpointReference(Element... referenceParameters);
/**
* Returns the <code>EndpointReference</code> associated with
* this <code>Endpoint</code> instance.
*
* @param clazz Specifies the type of EndpointReference that MUST be returned.
* @param referenceParameters Reference parameters to be associated with the
* returned <code>EndpointReference</code> instance.
* @return EndpointReference of type <code>clazz</code> of this
* <code>Endpoint</code> instance.
* If the returned <code>EndpointReference</code> is of type
* <code>W3CEndpointReference</code> then it MUST contain the
* the specified <code>referenceParameters</code>.
* @throws WebServiceException If any error in the creation of
* the <code>EndpointReference</code> or if the <code>Endpoint</code> is
* not in the published state or if the <code>clazz</code> is not a supported
* <code>EndpointReference</code> type.
* @throws UnsupportedOperationException If this <code>BindingProvider</code>
* uses the XML/HTTP binding.
*
*
* @since JAX-WS 2.1
**/
public abstract <T extends EndpointReference> T getEndpointReference(Class<T> clazz,
Element... referenceParameters);
/**
* By settng a <code>EndpointContext</code>, JAX-WS runtime knows about
* addresses of other endpoints in an application. If multiple endpoints
* share different ports of a WSDL, then the multiple port addresses
* are patched when the WSDL is accessed.
*
* <p>
* This needs to be set before publishing the endpoints.
*
* @param ctxt that is shared for multiple endpoints
* @throws java.lang.IllegalStateException
* If the endpoint has been published already or it has been stopped.
*
* @since JAX-WS 2.2
*/
public void setEndpointContext(EndpointContext ctxt) {
throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
}
}

View File

@@ -0,0 +1,59 @@
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import javax.xml.ws.Endpoint;
import java.util.Set;
/**
* <code>EndpointContext</code> allows multiple endpoints in an application
* to share any information. For example, servlet application's war may
* contain multiple endpoints and these endpoints can get addresses of each
* other by sharing this context. If multiple endpoints share different
* ports of a WSDL, then the multiple port addresses can be patched
* when the WSDL is accessed. It also allows all endpoints to share any
* other runtime information.
*
* <p>
* This needs to be set by using {@link Endpoint#setEndpointContext}
* before {@link Endpoint#publish} methods.
*
* @author Jitendra Kotamraju
* @since JAX-WS 2.2
*/
public abstract class EndpointContext {
/**
* This gives list of endpoints in an application. For e.g in
* servlet container, a war file may contain multiple endpoints.
* In case of http, these endpoints are hosted on the same http
* server.
*
* @return list of all endpoints in an application
*/
public abstract Set<Endpoint> getEndpoints();
}

View File

@@ -0,0 +1,192 @@
/*
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamResult;
import javax.xml.ws.spi.Provider;
import javax.xml.ws.wsaddressing.W3CEndpointReference;
import java.io.StringWriter;
/**
* This class represents an WS-Addressing EndpointReference
* which is a remote reference to a web service endpoint.
* See <a href="http://www.w3.org/TR/2006/REC-ws-addr-core-20060509/">
* Web Services Addressing 1.0 - Core</a>
* for more information on WS-Addressing EndpointReferences.
* <p>
* This class is immutable as the typical web service developer
* need not be concerned with its contents. The web service
* developer should use this class strictly as a mechanism to
* reference a remote web service endpoint. See the {@link Service} APIs
* that clients can use to that utilize an <code>EndpointReference</code>.
* See the {@link javax.xml.ws.Endpoint}, and
* {@link javax.xml.ws.BindingProvider} APIs on how
* <code>EndpointReferences</code> can be created for published
* endpoints.
* <p>
* Concrete implementations of this class will represent
* an <code>EndpointReference</code> for a particular version of Addressing.
* For example the {@link W3CEndpointReference} is for use
* with W3C Web Services Addressing 1.0 - Core Recommendation.
* If JAX-WS implementors need to support different versions
* of addressing, they should write their own
* <code>EndpointReference</code> subclass for that version.
* This will allow a JAX-WS implementation to create
* a vendor specific <code>EndpointReferences</code> that the
* vendor can use to flag a different version of
* addressing.
* <p>
* Web service developers that wish to pass or return
* <code>EndpointReference</code> in Java methods in an
* SEI should use
* concrete instances of an <code>EndpointReference</code> such
* as the <code>W3CEndpointReference</code>. This way the
* schema mapped from the SEI will be more descriptive of the
* type of endpoint reference being passed.
* <p>
* JAX-WS implementors are expected to extract the XML infoset
* from an <CODE>EndpointReferece</CODE> using the
* <code>{@link EndpointReference#writeTo}</code>
* method.
* <p>
* JAXB will bind this class to xs:anyType. If a better binding
* is desired, web services developers should use a concrete
* subclass such as {@link W3CEndpointReference}.
*
* @see W3CEndpointReference
* @see Service
* @since JAX-WS 2.1
*/
@XmlTransient // to treat this class like Object as far as databinding is concerned (proposed JAXB 2.1 feature)
public abstract class EndpointReference {
//
//Default constructor to be only called by derived types.
//
protected EndpointReference(){}
/**
* Factory method to read an EndpointReference from the infoset contained in
* <code>eprInfoset</code>. This method delegates to the vendor specific
* implementation of the {@link javax.xml.ws.spi.Provider#readEndpointReference} method.
*
* @param eprInfoset The <code>EndpointReference</code> infoset to be unmarshalled
*
* @return the EndpointReference unmarshalled from <code>eprInfoset</code>
* never <code>null</code>
* @throws WebServiceException
* if an error occurs while creating the
* <code>EndpointReference</code> from the <CODE>eprInfoset</CODE>
* @throws java.lang.IllegalArgumentException
* if the <code>null</code> <code>eprInfoset</code> value is given.
*/
public static EndpointReference readFrom(Source eprInfoset) {
return Provider.provider().readEndpointReference(eprInfoset);
}
/**
* write this <code>EndpointReference</code> to the specified infoset format
*
* @param result for writing infoset
* @throws WebServiceException
* if there is an error writing the
* <code>EndpointReference</code> to the specified <code>result</code>.
*
* @throws java.lang.IllegalArgumentException
* If the <code>null</code> <code>result</code> value is given.
*/
public abstract void writeTo(Result result);
/**
* The <code>getPort</code> method returns a proxy. If there
* are any reference parameters in the
* <code>EndpointReference</code> instance, then those reference
* parameters MUST appear as SOAP headers, indicating them to be
* reference parameters, on all messages sent to the endpoint.
* The parameter <code>serviceEndpointInterface</code> specifies
* the service endpoint interface that is supported by the
* returned proxy.
* The <code>EndpointReference</code> instance specifies the
* endpoint that will be invoked by the returned proxy.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the proxy accordingly from
* the WSDL Metadata from this <code>EndpointReference</code> or from
* annotations on the <code>serviceEndpointInterface</code>. For this method
* to successfully return a proxy, WSDL metadata MUST be available and the
* <code>EndpointReference</code> instance MUST contain an implementation understood
* <code>serviceName</code> metadata.
* <p>
* Because this port is not created from a <code>Service</code> object, handlers
* will not automatically be configured, and the <code>HandlerResolver</code>
* and <code>Executor</code> cannot be get or set for this port. The
* <code>BindingProvider().getBinding().setHandlerChain()</code>
* method can be used to manually configure handlers for this port.
*
*
* @param serviceEndpointInterface Service endpoint interface
* @param features An array of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return Object Proxy instance that supports the
* specified service endpoint interface
* @throws WebServiceException
* <UL>
* <LI>If there is an error during creation
* of the proxy
* <LI>If there is any missing WSDL metadata
* as required by this method
* <LI>If this
* <code>endpointReference</code>
* is invalid
* <LI>If an illegal
* <code>serviceEndpointInterface</code>
* is specified
* <LI>If a feature is enabled that is not compatible with
* this port or is unsupported.
* </UL>
*
* @see java.lang.reflect.Proxy
* @see WebServiceFeature
**/
public <T> T getPort(Class<T> serviceEndpointInterface,
WebServiceFeature... features) {
return Provider.provider().getPort(this, serviceEndpointInterface,
features);
}
/**
* Displays EPR infoset for debugging convenience.
*/
public String toString() {
StringWriter w = new StringWriter();
writeTo(new StreamResult(w));
return w.toString();
}
}

View File

@@ -0,0 +1,164 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* The <code>FaultAction</code> annotation is used inside an {@link Action}
* annotation to allow an explicit association of a WS-Addressing
* <code>Action</code> message addressing property with the <code>fault</code>
* messages of the WSDL operation mapped from the exception class.
* <p>
* The <code>wsam:Action</code> attribute value in the <code>fault</code>
* message in the generated WSDL operation mapped for <code>className</code>
* class is equal to the corresponding value in the <code>FaultAction</code>.
* For the exact computation of <code>wsam:Action</code> values for the
* fault messages, refer to the algorithm in the JAX-WS specification.
*
* <p>
* <b>Example 1</b>: Specify explicit values for <code>Action</code> message addressing
* property for the <code>input</code>, <code>output</code> and <code>fault</code> message
* if the Java method throws only one service specific exception.
*
* <pre>
* &#64;WebService(targetNamespace="http://example.com/numbers")
* public class AddNumbersImpl {
* &#64;Action(
* fault = {
* <b>&#64;FaultAction(className=AddNumbersException.class, value="http://example.com/faultAction")</b>
* })
* public int addNumbers(int number1, int number2)
* throws AddNumbersException {
* return number1 + number2;
* }
* }
* </pre>
*
* The generated WSDL looks like:
*
* <pre>
* &lt;definitions targetNamespace="http://example.com/numbers" ...>
* ...
* &lt;portType name="AddNumbersPortType">
* &lt;operation name="AddNumbers">
* ...
* &lt;fault message="tns:AddNumbersException" name="AddNumbersException"
* <b>wsam:Action="http://example.com/faultAction"</b>/>
* &lt;/operation>
* &lt;/portType>
* ...
* &lt;/definitions>
* </pre>
*
* <p>
* Example 2: Here is an example that shows if the explicit value for <code>Action</code>
* message addressing property for the service specific exception is not present.
*
* <pre>
* &#64;WebService(targetNamespace="http://example.com/numbers")
* public class AddNumbersImpl {
* public int addNumbers(int number1, int number2)
* throws AddNumbersException {
* return number1 + number2;
* }
* }
* </pre>
*
* The generated WSDL looks like:
*
* <pre>
* &lt;definitions targetNamespace="http://example.com/numbers" ...>
* ...
* &lt;portType name="AddNumbersPortType">
* &lt;operation name="AddNumbers">
* ...
* &lt;fault message="tns:addNumbersFault" name="InvalidNumbers"
* <b>wsam:Action="http://example.com/numbers/AddNumbersPortType/AddNumbers/Fault/AddNumbersException"</b>/>
* &lt;/operation>
* &lt;/portType>
* ...
* &lt;/definitions>
* </pre>
*
* <p>
* Example 3: Here is an example that shows how to specify explicit values for <code>Action</code>
* message addressing property if the Java method throws more than one service specific exception.
*
* <pre>
* &#64;WebService(targetNamespace="http://example.com/numbers")
* public class AddNumbersImpl {
* &#64;Action(
* fault = {
* <b>&#64;FaultAction(className=AddNumbersException.class, value="http://example.com/addFaultAction"),
* &#64;FaultAction(className=TooBigNumbersException.class, value="http://example.com/toobigFaultAction")</b>
* })
* public int addNumbers(int number1, int number2)
* throws AddNumbersException, TooBigNumbersException {
* return number1 + number2;
* }
* }
* </pre>
*
* The generated WSDL looks like:
*
* <pre>
* &lt;definitions targetNamespace="http://example.com/numbers" ...>
* ...
* &lt;portType name="AddNumbersPortType">
* &lt;operation name="AddNumbers">
* ...
* &lt;fault message="tns:addNumbersFault" name="AddNumbersException"
* <b>wsam:Action="http://example.com/addFaultAction"</b>/>
* &lt;fault message="tns:tooBigNumbersFault" name="TooBigNumbersException"
* <b>wsam:Action="http://example.com/toobigFaultAction"</b>/>
* &lt;/operation>
* &lt;/portType>
* ...
* &lt;/definitions>
* </pre>
*
* @since JAX-WS 2.1
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface FaultAction {
/**
* Name of the exception class
*/
Class<? extends Exception> className();
/**
* Value of WS-Addressing <code>Action</code> message addressing property for the exception
*/
String value() default "";
}

View File

@@ -0,0 +1,58 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.io.Serializable;
/**
* Holds a value of type <code>T</code>.
*
* @since JAX-WS 2.0
*/
public final class Holder<T> implements Serializable {
private static final long serialVersionUID = 2623699057546497185L;
/**
* The value contained in the holder.
*/
public T value;
/**
* Creates a new holder with a <code>null</code> value.
*/
public Holder() {
}
/**
* Create a new holder with the specified value.
*
* @param value The value to be stored in the holder.
*/
public Holder(T value) {
this.value = value;
}
}

View File

@@ -0,0 +1,92 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import javax.xml.transform.Source;
import javax.xml.bind.JAXBContext;
/** The <code>LogicalMessage</code> interface represents a
* protocol agnostic XML message and contains methods that
* provide access to the payload of the message.
*
* @since JAX-WS 2.0
**/
public interface LogicalMessage {
/** Gets the message payload as an XML source, may be called
* multiple times on the same LogicalMessage instance, always
* returns a new <code>Source</code> that may be used to retrieve the entire
* message payload.
*
* <p>If the returned <code>Source</code> is an instance of
* <code>DOMSource</code>, then
* modifications to the encapsulated DOM tree change the message
* payload in-place, there is no need to susequently call
* <code>setPayload</code>. Other types of <code>Source</code> provide only
* read access to the message payload.
*
* @return The contained message payload; returns <code>null</code> if no
* payload is present in this message.
**/
public Source getPayload();
/** Sets the message payload
*
* @param payload message payload
* @throws WebServiceException If any error during the setting
* of the payload in this message
* @throws java.lang.UnsupportedOperationException If this
* operation is not supported
**/
public void setPayload(Source payload);
/** Gets the message payload as a JAXB object. Note that there is no
* connection between the returned object and the message payload,
* changes to the payload require calling <code>setPayload</code>.
*
* @param context The JAXBContext that should be used to unmarshall
* the message payload
* @return The contained message payload; returns <code>null</code> if no
* payload is present in this message
* @throws WebServiceException If an error occurs when using a supplied
* JAXBContext to unmarshall the payload. The cause of
* the WebServiceException is the original JAXBException.
**/
public Object getPayload(JAXBContext context);
/** Sets the message payload
*
* @param payload message payload
* @param context The JAXBContext that should be used to marshall
* the payload
* @throws java.lang.UnsupportedOperationException If this
* operation is not supported
* @throws WebServiceException If an error occurs when using the supplied
* JAXBContext to marshall the payload. The cause of
* the WebServiceException is the original JAXBException.
**/
public void setPayload(Object payload, JAXBContext context);
}

View File

@@ -0,0 +1,88 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
/** The <code>ProtocolException</code> class is a
* base class for exceptions related to a specific protocol binding. Subclasses
* are used to communicate protocol level fault information to clients and may
* be used on the server to control the protocol specific fault representation.
*
* @since JAX-WS 2.0
**/
public class ProtocolException extends WebServiceException {
/**
* Constructs a new protocol exception with <code>null</code> as its detail message. The
* cause is not initialized, and may subsequently be initialized by a call
* to <code>Throwable.initCause(java.lang.Throwable)</code>.
*/
public ProtocolException() {
super();
}
/**
* Constructs a new protocol exception with the specified detail message.
* The cause is not initialized, and may subsequently be initialized by a
* call to <code>Throwable.initCause(java.lang.Throwable)</code>.
*
* @param message the detail message. The detail message is saved for later
* retrieval by the Throwable.getMessage() method.
*/
public ProtocolException(String message) {
super(message);
}
/**
* Constructs a new runtime exception with the specified detail message and
* cause.
*
* Note that the detail message associated with cause is not automatically
* incorporated in this runtime exception's detail message.
*
* @param message the detail message (which is saved for later retrieval by
* the Throwable.getMessage() method).
* @param cause the cause (which is saved for later retrieval by the
* <code>Throwable.getCause()</code> method). (A <code>null</code> value is permitted, and indicates
* that the cause is nonexistent or unknown.)
*/
public ProtocolException(String message, Throwable cause) {
super(message, cause);
}
/**
* Constructs a new runtime exception with the specified cause and a detail
* message of <code>(cause==null ? null : cause.toString())</code> (which typically
* contains the class and detail message of cause). This constructor is
* useful for runtime exceptions that are little more than wrappers for
* other throwables.
*
* @param cause the cause (which is saved for later retrieval by the
* <code>Throwable.getCause()</code> method). (A <code>null</code> value is permitted, and indicates
* that the cause is nonexistent or unknown.)
*/
public ProtocolException(Throwable cause) {
super(cause);
}
}

View File

@@ -0,0 +1,63 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
/**
* <p>Service endpoints may implement the <code>Provider</code>
* interface as a dynamic alternative to an SEI.
*
* <p>Implementations are required to support <code>Provider&lt;Source&gt;</code>,
* <code>Provider&lt;SOAPMessage&gt;</code> and
* <code>Provider&lt;DataSource&gt;</code>, depending on the binding
* in use and the service mode.
*
* <p>The <code>ServiceMode</code> annotation can be used to control whether
* the <code>Provider</code> instance will receive entire protocol messages
* or just message payloads.
*
* @since JAX-WS 2.0
*
* @see javax.xml.transform.Source
* @see javax.xml.soap.SOAPMessage
* @see javax.xml.ws.ServiceMode
**/
public interface Provider<T> {
/** Invokes an operation occording to the contents of the request
* message.
*
* @param request The request message or message payload.
* @return The response message or message payload. May be <code>null</code> if
there is no response.
* @throws WebServiceException If there is an error processing request.
* The cause of the <code>WebServiceException</code> may be set to a subclass
* of <code>ProtocolException</code> to control the protocol level
* representation of the exception.
* @see javax.xml.ws.handler.MessageContext
* @see javax.xml.ws.ProtocolException
**/
public T invoke(T request);
}

View File

@@ -0,0 +1,72 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
/**
* Used to annotate methods in the Service Endpoint Interface with the request
* wrapper bean to be used at runtime. The default value of the <code>localName</code> is
* the <code>operationName</code>, as defined in <code>WebMethod</code> annotation and the
* <code>targetNamespace</code> is the target namespace of the SEI.
* <p> When starting from Java this annotation is used resolve
* overloading conflicts in document literal mode. Only the <code>className</code>
* is required in this case.
*
* @since JAX-WS 2.0
**/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestWrapper {
/**
* Element's local name.
*/
public String localName() default "";
/**
* Element's namespace name.
*/
public String targetNamespace() default "";
/**
* Request wrapper bean name.
*/
public String className() default "";
/**
* wsdl:part name for the wrapper part
*
* @since JAX-WS 2.2
*/
public String partName() default "";
}

View File

@@ -0,0 +1,68 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.xml.ws.spi.WebServiceFeatureAnnotation;
/**
* This feature clarifies the use of the <code>wsdl:binding</code>
* in a JAX-WS runtime.
* <p>
* This annotation MUST only be used in conjunction the
* <code>javax.jws.WebService</code>, {@link WebServiceProvider},
* {@link WebServiceRef} annotations.
* When used with the <code>javax.jws.WebService</code> annotation this
* annotation MUST only be used on the service endpoint implementation
* class.
* When used with a <code>WebServiceRef</code> annotation, this annotation
* MUST only be used when a proxy instance is created. The injected SEI
* proxy, and endpoint MUST honor the values of the <code>RespectBinding</code>
* annotation.
* <p>
*
* This annotation's behaviour is defined by the corresponding feature
* {@link RespectBindingFeature}.
*
* @see RespectBindingFeature
*
* @since JAX-WS 2.1
*/
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@WebServiceFeatureAnnotation(id=RespectBindingFeature.ID,bean=RespectBindingFeature.class)
public @interface RespectBinding {
/**
* Specifies if this feature is enabled or disabled.
*/
boolean enabled() default true;
}

View File

@@ -0,0 +1,117 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import javax.xml.ws.soap.AddressingFeature;
/**
* This feature clarifies the use of the <code>wsdl:binding</code>
* in a JAX-WS runtime.
*
* This feature can be used during the creation of SEI proxy, and
* {@link Dispatch} instances on the client side and {@link Endpoint}
* instances on the server side. This feature cannot be used for {@link Service}
* instance creation on the client side.
* <p>
* This feature is only useful with web services that have an
* associated WSDL. Enabling this feature requires that a JAX-WS
* implementation inspect the <code>wsdl:binding</code> for an
* endpoint at runtime to make sure that all <code>wsdl:extensions</code>
* that have the <code>required</code> attribute set to <code>true</code>
* are understood and are being used.
* <p>
* The following describes the affects of this feature with respect
* to be enabled or disabled:
* <ul>
* <li> ENABLED: In this Mode, a JAX-WS runtime MUST assure that all
* required <code>wsdl:binding</code> extensions(including policies) are
* either understood and used by the runtime, or explicitly disabled by the
* web service application. A web service can disable a particular
* extension if there is a corresponding {@link WebServiceFeature} or annotation.
* Similarly, a web service client can disable
* particular extension using the corresponding <code>WebServiceFeature</code> while
* creating a proxy or Dispatch instance.
* The runtime MUST also make sure that binding of
* SEI parameters/return values respect the <code>wsdl:binding</code>.
* With this feature enabled, if a required (<code>wsdl:required="true"</code>)
* <code>wsdl:binding</code> extension is in the WSDL and it is not
* supported by a JAX-WS runtime and it has not
* been explicitly turned off by the web service developer, then
* that JAX-WS runtime MUST behave appropriately based on whether it is
* on the client or server:
* <UL>
* <li>Client: runtime MUST throw a
* {@link WebServiceException} no sooner than when one of the methods
* above is invoked but no later than the first invocation of an endpoint
* operation.
* <li>Server: throw a {@link WebServiceException} and the endpoint MUST fail to deploy
* </ul>
*
* <li> DISABLED: In this Mode, an implementation may choose whether
* to inspect the <code>wsdl:binding</code> or not and to what degree
* the <code>wsdl:binding</code> will be inspected. For example,
* one implementation may choose to behave as if this feature is enabled,
* another implementation may only choose to verify the SEI's
* parameter/return type bindings.
* </ul>
*
* @see AddressingFeature
*
* @since JAX-WS 2.1
*/
public final class RespectBindingFeature extends WebServiceFeature {
/**
*
* Constant value identifying the RespectBindingFeature
*/
public static final String ID = "javax.xml.ws.RespectBindingFeature";
/**
* Creates an <code>RespectBindingFeature</code>.
* The instance created will be enabled.
*/
public RespectBindingFeature() {
this.enabled = true;
}
/**
* Creates an RespectBindingFeature
*
* @param enabled specifies whether this feature should
* be enabled or not.
*/
public RespectBindingFeature(boolean enabled) {
this.enabled = enabled;
}
/**
* {@inheritDoc}
*/
public String getID() {
return ID;
}
}

View File

@@ -0,0 +1,52 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.util.Map;
import java.util.concurrent.Future;
/** The <code>Response</code> interface provides methods used to obtain the
* payload and context of a message sent in response to an operation
* invocation.
*
* <p>For asynchronous operation invocations it provides additional methods
* to check the status of the request. The <code>get(...)</code> methods may
* throw the standard
* set of exceptions and their cause may be a <code>RemoteException</code> or a
* {@link WebServiceException} that represents the error that occured during the
* asynchronous method invocation.</p>
*
* @since JAX-WS 2.0
**/
public interface Response<T> extends Future<T> {
/** Gets the contained response context.
*
* @return The contained response context. May be <code>null</code> if a
* response is not yet available.
*
**/
Map<String,Object> getContext();
}

View File

@@ -0,0 +1,72 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
/**
* Used to annotate methods in the Service Endpoint Interface with the response
* wrapper bean to be used at runtime. The default value of the <code>localName</code> is
* the <code>operationName</code> as defined in <code>WebMethod</code> annotation appended with
* <code>Response</code> and the <code>targetNamespace</code> is the target namespace of the SEI.
* <p> When starting from Java this annotation is used resolve
* overloading conflicts in document literal mode. Only the <code>className</code>
* is required in this case.
*
* @since JAX-WS 2.0
**/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResponseWrapper {
/**
* Element's local name.
*/
public String localName() default "";
/**
* Element's namespace name.
*/
public String targetNamespace() default "";
/**
* Response wrapper bean name.
*/
public String className() default "";
/**
* wsdl:part name for the wrapper part
*
* @since JAX-WS 2.2
*/
public String partName() default "";
}

View File

@@ -0,0 +1,760 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import javax.xml.namespace.QName;
import java.util.Iterator;
import javax.xml.ws.handler.HandlerResolver;
import javax.xml.bind.JAXBContext;
import javax.xml.ws.spi.ServiceDelegate;
import javax.xml.ws.spi.Provider;
/**
* <code>Service</code> objects provide the client view of a Web service.
* <p><code>Service</code> acts as a factory of the following:
* <ul>
* <li>Proxies for a target service endpoint.</li>
* <li>Instances of {@link javax.xml.ws.Dispatch} for
* dynamic message-oriented invocation of a remote
* operation.
* </li>
* </ul>
*
* <p>The ports available on a service can be enumerated using the
* <code>getPorts</code> method. Alternatively, you can pass a
* service endpoint interface to the unary <code>getPort</code> method
* and let the runtime select a compatible port.
*
* <p>Handler chains for all the objects created by a <code>Service</code>
* can be set by means of a <code>HandlerResolver</code>.
*
* <p>An <code>Executor</code> may be set on the service in order
* to gain better control over the threads used to dispatch asynchronous
* callbacks. For instance, thread pooling with certain parameters
* can be enabled by creating a <code>ThreadPoolExecutor</code> and
* registering it with the service.
*
* @since JAX-WS 2.0
*
* @see javax.xml.ws.spi.Provider
* @see javax.xml.ws.handler.HandlerResolver
* @see java.util.concurrent.Executor
**/
public class Service {
private ServiceDelegate delegate;
/**
* The orientation of a dynamic client or service. <code>MESSAGE</code> provides
* access to entire protocol message, <code>PAYLOAD</code> to protocol message
* payload only.
**/
public enum Mode { MESSAGE, PAYLOAD }
protected Service(java.net.URL wsdlDocumentLocation, QName serviceName) {
delegate = Provider.provider().createServiceDelegate(wsdlDocumentLocation,
serviceName,
this.getClass());
}
protected Service(java.net.URL wsdlDocumentLocation, QName serviceName, WebServiceFeature ... features) {
delegate = Provider.provider().createServiceDelegate(wsdlDocumentLocation,
serviceName,
this.getClass(), features);
}
/**
* The <code>getPort</code> method returns a proxy. A service client
* uses this proxy to invoke operations on the target
* service endpoint. The <code>serviceEndpointInterface</code>
* specifies the service endpoint interface that is supported by
* the created dynamic proxy instance.
*
* @param portName Qualified name of the service endpoint in
* the WSDL service description.
* @param serviceEndpointInterface Service endpoint interface
* supported by the dynamic proxy instance.
* @return Object Proxy instance that
* supports the specified service endpoint
* interface.
* @throws WebServiceException This exception is thrown in the
* following cases:
* <UL>
* <LI>If there is an error in creation of
* the proxy.
* <LI>If there is any missing WSDL metadata
* as required by this method.
* <LI>If an illegal
* <code>serviceEndpointInterface</code>
* or <code>portName</code> is specified.
* </UL>
* @see java.lang.reflect.Proxy
* @see java.lang.reflect.InvocationHandler
**/
public <T> T getPort(QName portName,
Class<T> serviceEndpointInterface) {
return delegate.getPort(portName, serviceEndpointInterface);
}
/**
* The <code>getPort</code> method returns a proxy. A service client
* uses this proxy to invoke operations on the target
* service endpoint. The <code>serviceEndpointInterface</code>
* specifies the service endpoint interface that is supported by
* the created dynamic proxy instance.
*
* @param portName Qualified name of the service endpoint in
* the WSDL service description.
* @param serviceEndpointInterface Service endpoint interface
* supported by the dynamic proxy instance.
* @param features A list of WebServiceFeatures to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return Object Proxy instance that
* supports the specified service endpoint
* interface.
* @throws WebServiceException This exception is thrown in the
* following cases:
* <UL>
* <LI>If there is an error in creation of
* the proxy.
* <LI>If there is any missing WSDL metadata
* as required by this method.
* <LI>If an illegal
* <code>serviceEndpointInterface</code>
* or <code>portName</code> is specified.
* <LI>If a feature is enabled that is not compatible
* with this port or is unsupported.
* </UL>
* @see java.lang.reflect.Proxy
* @see java.lang.reflect.InvocationHandler
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public <T> T getPort(QName portName,
Class<T> serviceEndpointInterface, WebServiceFeature... features) {
return delegate.getPort(portName, serviceEndpointInterface, features);
}
/**
* The <code>getPort</code> method returns a proxy. The parameter
* <code>serviceEndpointInterface</code> specifies the service
* endpoint interface that is supported by the returned proxy.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the proxy accordingly.
* The returned proxy should not be reconfigured by the client.
*
* @param serviceEndpointInterface Service endpoint interface.
* @return Object instance that supports the
* specified service endpoint interface.
* @throws WebServiceException
* <UL>
* <LI>If there is an error during creation
* of the proxy.
* <LI>If there is any missing WSDL metadata
* as required by this method.
* <LI>If an illegal
* <code>serviceEndpointInterface</code>
* is specified.
* </UL>
**/
public <T> T getPort(Class<T> serviceEndpointInterface) {
return delegate.getPort(serviceEndpointInterface);
}
/**
* The <code>getPort</code> method returns a proxy. The parameter
* <code>serviceEndpointInterface</code> specifies the service
* endpoint interface that is supported by the returned proxy.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the proxy accordingly.
* The returned proxy should not be reconfigured by the client.
*
* @param serviceEndpointInterface Service endpoint interface.
* @param features A list of WebServiceFeatures to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return Object instance that supports the
* specified service endpoint interface.
* @throws WebServiceException
* <UL>
* <LI>If there is an error during creation
* of the proxy.
* <LI>If there is any missing WSDL metadata
* as required by this method.
* <LI>If an illegal
* <code>serviceEndpointInterface</code>
* is specified.
* <LI>If a feature is enabled that is not compatible
* with this port or is unsupported.
* </UL>
*
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public <T> T getPort(Class<T> serviceEndpointInterface,
WebServiceFeature... features) {
return delegate.getPort(serviceEndpointInterface, features);
}
/**
* The <code>getPort</code> method returns a proxy.
* The parameter <code>endpointReference</code> specifies the
* endpoint that will be invoked by the returned proxy. If there
* are any reference parameters in the
* <code>endpointReference</code>, then those reference
* parameters MUST appear as SOAP headers, indicating them to be
* reference parameters, on all messages sent to the endpoint.
* The <code>endpointReference's</code> address MUST be used
* for invocations on the endpoint.
* The parameter <code>serviceEndpointInterface</code> specifies
* the service endpoint interface that is supported by the
* returned proxy.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the proxy accordingly from
* the WSDL associated with this <code>Service</code> instance or
* from the metadata from the <code>endpointReference</code>.
* If this <code>Service</code> instance has a WSDL and
* the <code>endpointReference</code> metadata
* also has a WSDL, then the WSDL from this instance MUST be used.
* If this <code>Service</code> instance does not have a WSDL and
* the <code>endpointReference</code> does have a WSDL, then the
* WSDL from the <code>endpointReference</code> MAY be used.
* The returned proxy should not be reconfigured by the client.
* If this <code>Service</code> instance has a known proxy
* port that matches the information contained in
* the WSDL,
* then that proxy is returned, otherwise a WebServiceException
* is thrown.
* <p>
* Calling this method has the same behavior as the following
* <pre>
* <code>port = service.getPort(portName, serviceEndpointInterface);</code>
* </pre>
* where the <code>portName</code> is retrieved from the
* metadata of the <code>endpointReference</code> or from the
* <code>serviceEndpointInterface</code> and the WSDL
* associated with this <code>Service</code> instance.
*
* @param endpointReference The <code>EndpointReference</code>
* for the target service endpoint that will be invoked by the
* returned proxy.
* @param serviceEndpointInterface Service endpoint interface.
* @param features A list of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return Object Proxy instance that supports the
* specified service endpoint interface.
* @throws WebServiceException
* <UL>
* <LI>If there is an error during creation
* of the proxy.
* <LI>If there is any missing WSDL metadata
* as required by this method.
* <LI>If the <code>endpointReference</code> metadata does
* not match the <code>serviceName</code> of this
* <code>Service</code> instance.
* <LI>If a <code>portName</code> cannot be extracted
* from the WSDL or <code>endpointReference</code> metadata.
* <LI>If an invalid
* <code>endpointReference</code>
* is specified.
* <LI>If an invalid
* <code>serviceEndpointInterface</code>
* is specified.
* <LI>If a feature is enabled that is not compatible
* with this port or is unsupported.
* </UL>
*
* @since JAX-WS 2.1
**/
public <T> T getPort(EndpointReference endpointReference,
Class<T> serviceEndpointInterface, WebServiceFeature... features) {
return delegate.getPort(endpointReference, serviceEndpointInterface, features);
}
/**
* Creates a new port for the service. Ports created in this way contain
* no WSDL port type information and can only be used for creating
* <code>Dispatch</code>instances.
*
* @param portName Qualified name for the target service endpoint.
* @param bindingId A String identifier of a binding.
* @param endpointAddress Address of the target service endpoint as a URI.
* @throws WebServiceException If any error in the creation of
* the port.
*
* @see javax.xml.ws.soap.SOAPBinding#SOAP11HTTP_BINDING
* @see javax.xml.ws.soap.SOAPBinding#SOAP12HTTP_BINDING
* @see javax.xml.ws.http.HTTPBinding#HTTP_BINDING
**/
public void addPort(QName portName, String bindingId, String endpointAddress) {
delegate.addPort(portName, bindingId, endpointAddress);
}
/**
* Creates a <code>Dispatch</code> instance for use with objects of
* the client's choosing.
*
* @param portName Qualified name for the target service endpoint
* @param type The class of object used for messages or message
* payloads. Implementations are required to support
* <code>javax.xml.transform.Source</code>, <code>javax.xml.soap.SOAPMessage</code>
* and <code>javax.activation.DataSource</code>, depending on
* the binding in use.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the client will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the client will work with
* SOAP messages or the contents of a SOAP body. Mode MUST be MESSAGE
* when type is SOAPMessage.
*
* @return Dispatch instance.
* @throws WebServiceException If any error in the creation of
* the <code>Dispatch</code> object.
*
* @see javax.xml.transform.Source
* @see javax.xml.soap.SOAPMessage
**/
public <T> Dispatch<T> createDispatch(QName portName, Class<T> type, Mode mode) {
return delegate.createDispatch(portName, type, mode);
}
/**
* Creates a <code>Dispatch</code> instance for use with objects of
* the client's choosing.
*
* @param portName Qualified name for the target service endpoint
* @param type The class of object used for messages or message
* payloads. Implementations are required to support
* <code>javax.xml.transform.Source</code> and <code>javax.xml.soap.SOAPMessage</code>.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the client will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the client will work with
* SOAP messages or the contents of a SOAP body. Mode MUST be <code>MESSAGE</code>
* when type is <code>SOAPMessage</code>.
* @param features A list of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
*
* @return Dispatch instance.
* @throws WebServiceException If any error in the creation of
* the <code>Dispatch</code> object or if a
* feature is enabled that is not compatible with
* this port or is unsupported.
*
* @see javax.xml.transform.Source
* @see javax.xml.soap.SOAPMessage
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public <T> Dispatch<T> createDispatch(QName portName, Class<T> type,
Service.Mode mode, WebServiceFeature... features) {
return delegate.createDispatch(portName, type, mode, features);
}
/**
* Creates a <code>Dispatch</code> instance for use with objects of
* the client's choosing. If there
* are any reference parameters in the
* <code>endpointReference</code>, then those reference
* parameters MUST appear as SOAP headers, indicating them to be
* reference parameters, on all messages sent to the endpoint.
* The <code>endpointReference's</code> address MUST be used
* for invocations on the endpoint.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the dispatch accordingly from
* the WSDL associated with this <code>Service</code> instance or
* from the metadata from the <code>endpointReference</code>.
* If this <code>Service</code> instance has a WSDL and
* the <code>endpointReference</code>
* also has a WSDL in its metadata, then the WSDL from this instance MUST be used.
* If this <code>Service</code> instance does not have a WSDL and
* the <code>endpointReference</code> does have a WSDL, then the
* WSDL from the <code>endpointReference</code> MAY be used.
* An implementation MUST be able to retrieve the <code>portName</code> from the
* <code>endpointReference</code> metadata.
* <p>
* This method behaves the same as calling
* <pre>
* <code>dispatch = service.createDispatch(portName, type, mode, features);</code>
* </pre>
* where the <code>portName</code> is retrieved from the
* WSDL or <code>EndpointReference</code> metadata.
*
* @param endpointReference The <code>EndpointReference</code>
* for the target service endpoint that will be invoked by the
* returned <code>Dispatch</code> object.
* @param type The class of object used to messages or message
* payloads. Implementations are required to support
* <code>javax.xml.transform.Source</code> and <code>javax.xml.soap.SOAPMessage</code>.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the client will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the client will work with
* SOAP messages or the contents of a SOAP body. Mode MUST be <code>MESSAGE</code>
* when type is <code>SOAPMessage</code>.
* @param features An array of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
*
* @return Dispatch instance
* @throws WebServiceException
* <UL>
* <LI>If there is any missing WSDL metadata
* as required by this method.
* <li>If the <code>endpointReference</code> metadata does
* not match the <code>serviceName</code> or <code>portName</code>
* of a WSDL associated
* with this <code>Service</code> instance.
* <li>If the <code>portName</code> cannot be determined
* from the <code>EndpointReference</code> metadata.
* <li>If any error in the creation of
* the <code>Dispatch</code> object.
* <li>If a feature is enabled that is not
* compatible with this port or is unsupported.
* </UL>
*
* @see javax.xml.transform.Source
* @see javax.xml.soap.SOAPMessage
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public <T> Dispatch<T> createDispatch(EndpointReference endpointReference,
Class<T> type, Service.Mode mode,
WebServiceFeature... features) {
return delegate.createDispatch(endpointReference, type, mode, features);
}
/**
* Creates a <code>Dispatch</code> instance for use with JAXB
* generated objects.
*
* @param portName Qualified name for the target service endpoint
* @param context The JAXB context used to marshall and unmarshall
* messages or message payloads.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the client will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the client will work with
* SOAP messages or the contents of a SOAP body.
*
* @return Dispatch instance.
* @throws WebServiceException If any error in the creation of
* the <code>Dispatch</code> object.
*
* @see javax.xml.bind.JAXBContext
**/
public Dispatch<Object> createDispatch(QName portName, JAXBContext context,
Mode mode) {
return delegate.createDispatch(portName, context, mode);
}
/**
* Creates a <code>Dispatch</code> instance for use with JAXB
* generated objects.
*
* @param portName Qualified name for the target service endpoint
* @param context The JAXB context used to marshall and unmarshall
* messages or message payloads.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the client will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the client will work with
* SOAP messages or the contents of a SOAP body.
* @param features A list of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
*
* @return Dispatch instance.
* @throws WebServiceException If any error in the creation of
* the <code>Dispatch</code> object or if a
* feature is enabled that is not compatible with
* this port or is unsupported.
*
* @see javax.xml.bind.JAXBContext
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public Dispatch<Object> createDispatch(QName portName,
JAXBContext context, Service.Mode mode, WebServiceFeature... features) {
return delegate.createDispatch(portName, context, mode, features);
}
/**
* Creates a <code>Dispatch</code> instance for use with JAXB
* generated objects. If there
* are any reference parameters in the
* <code>endpointReference</code>, then those reference
* parameters MUST appear as SOAP headers, indicating them to be
* reference parameters, on all messages sent to the endpoint.
* The <code>endpointReference's</code> address MUST be used
* for invocations on the endpoint.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the dispatch accordingly from
* the WSDL associated with this <code>Service</code> instance or
* from the metadata from the <code>endpointReference</code>.
* If this <code>Service</code> instance has a WSDL and
* the <code>endpointReference</code>
* also has a WSDL in its metadata, then the WSDL from this instance
* MUST be used.
* If this <code>Service</code> instance does not have a WSDL and
* the <code>endpointReference</code> does have a WSDL, then the
* WSDL from the <code>endpointReference</code> MAY be used.
* An implementation MUST be able to retrieve the <code>portName</code> from the
* <code>endpointReference</code> metadata.
* <p>
* This method behavies the same as calling
* <pre>
* <code>dispatch = service.createDispatch(portName, context, mode, features);</code>
* </pre>
* where the <code>portName</code> is retrieved from the
* WSDL or <code>endpointReference</code> metadata.
*
* @param endpointReference The <code>EndpointReference</code>
* for the target service endpoint that will be invoked by the
* returned <code>Dispatch</code> object.
* @param context The JAXB context used to marshall and unmarshall
* messages or message payloads.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the client will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the client will work with
* SOAP messages or the contents of a SOAP body.
* @param features An array of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
*
* @return Dispatch instance
* @throws WebServiceException
* <UL>
* <li>If there is any missing WSDL metadata
* as required by this method.
* <li>If the <code>endpointReference</code> metadata does
* not match the <code>serviceName</code> or <code>portName</code>
* of a WSDL associated
* with this <code>Service</code> instance.
* <li>If the <code>portName</code> cannot be determined
* from the <code>EndpointReference</code> metadata.
* <li>If any error in the creation of
* the <code>Dispatch</code> object.
* <li>if a feature is enabled that is not
* compatible with this port or is unsupported.
* </UL>
*
* @see javax.xml.bind.JAXBContext
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public Dispatch<Object> createDispatch(EndpointReference endpointReference,
JAXBContext context, Service.Mode mode,
WebServiceFeature... features) {
return delegate.createDispatch(endpointReference, context, mode, features);
}
/**
* Gets the name of this service.
* @return Qualified name of this service
**/
public QName getServiceName() {
return delegate.getServiceName();
}
/**
* Returns an <code>Iterator</code> for the list of
* <code>QName</code>s of service endpoints grouped by this
* service
*
* @return Returns <code>java.util.Iterator</code> with elements
* of type <code>javax.xml.namespace.QName</code>.
* @throws WebServiceException If this Service class does not
* have access to the required WSDL metadata.
**/
public Iterator<javax.xml.namespace.QName> getPorts() {
return delegate.getPorts();
}
/**
* Gets the location of the WSDL document for this Service.
*
* @return URL for the location of the WSDL document for
* this service.
**/
public java.net.URL getWSDLDocumentLocation() {
return delegate.getWSDLDocumentLocation();
}
/**
* Returns the configured handler resolver.
*
* @return HandlerResolver The <code>HandlerResolver</code> being
* used by this <code>Service</code> instance, or <code>null</code>
* if there isn't one.
**/
public HandlerResolver getHandlerResolver() {
return delegate.getHandlerResolver();
}
/**
* Sets the <code>HandlerResolver</code> for this <code>Service</code>
* instance.
* <p>
* The handler resolver, if present, will be called once for each
* proxy or dispatch instance that is created, and the handler chain
* returned by the resolver will be set on the instance.
*
* @param handlerResolver The <code>HandlerResolver</code> to use
* for all subsequently created proxy/dispatch objects.
*
* @see javax.xml.ws.handler.HandlerResolver
**/
public void setHandlerResolver(HandlerResolver handlerResolver) {
delegate.setHandlerResolver(handlerResolver);
}
/**
* Returns the executor for this <code>Service</code>instance.
*
* The executor is used for all asynchronous invocations that
* require callbacks.
*
* @return The <code>java.util.concurrent.Executor</code> to be
* used to invoke a callback.
*
* @see java.util.concurrent.Executor
**/
public java.util.concurrent.Executor getExecutor() {
return delegate.getExecutor();
}
/**
* Sets the executor for this <code>Service</code> instance.
*
* The executor is used for all asynchronous invocations that
* require callbacks.
*
* @param executor The <code>java.util.concurrent.Executor</code>
* to be used to invoke a callback.
*
* @throws SecurityException If the instance does not support
* setting an executor for security reasons (e.g. the
* necessary permissions are missing).
*
* @see java.util.concurrent.Executor
**/
public void setExecutor(java.util.concurrent.Executor executor) {
delegate.setExecutor(executor);
}
/**
* Creates a <code>Service</code> instance.
*
* The specified WSDL document location and service qualified name MUST
* uniquely identify a <code>wsdl:service</code> element.
*
* @param wsdlDocumentLocation <code>URL</code> for the WSDL document location
* for the service
* @param serviceName <code>QName</code> for the service
* @throws WebServiceException If any error in creation of the
* specified service.
**/
public static Service create(
java.net.URL wsdlDocumentLocation,
QName serviceName) {
return new Service(wsdlDocumentLocation, serviceName);
}
/**
* Creates a <code>Service</code> instance. The created instance is
* configured with the web service features.
*
* The specified WSDL document location and service qualified name MUST
* uniquely identify a <code>wsdl:service</code> element.
*
* @param wsdlDocumentLocation <code>URL</code> for the WSDL document location
* for the service
* @param serviceName <code>QName</code> for the service
* @param features Web Service features that must be configured on
* the service. If the provider doesn't understand a feature,
* it must throw a WebServiceException.
* @throws WebServiceException If any error in creation of the
* specified service.
* @since JAX-WS 2.2
**/
public static Service create(
java.net.URL wsdlDocumentLocation,
QName serviceName, WebServiceFeature ... features) {
return new Service(wsdlDocumentLocation, serviceName, features);
}
/**
* Creates a <code>Service</code> instance.
*
* @param serviceName <code>QName</code> for the service
* @throws WebServiceException If any error in creation of the
* specified service
*/
public static Service create(QName serviceName) {
return new Service(null, serviceName);
}
/**
* Creates a <code>Service</code> instance. The created instance is
* configured with the web service features.
*
* @param serviceName <code>QName</code> for the service
* @param features Web Service features that must be configured on
* the service. If the provider doesn't understand a feature,
* it must throw a WebServiceException.
* @throws WebServiceException If any error in creation of the
* specified service
*
* @since JAX-WS 2.2
*/
public static Service create(QName serviceName, WebServiceFeature ... features) {
return new Service(null, serviceName, features);
}
}

View File

@@ -0,0 +1,53 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Inherited;
/**
* Used to indicate whether a {@link Provider} implementation wishes to work
* with entire protocol messages or just with protocol message payloads.
*
* @since JAX-WS 2.0
**/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface ServiceMode {
/**
* Service mode. <code>PAYLOAD</code> indicates that the <code>Provider</code> implementation
* wishes to work with protocol message payloads only. <code>MESSAGE</code> indicates
* that the <code>Provider</code> implementation wishes to work with entire protocol
* messages.
**/
public Service.Mode value() default Service.Mode.PAYLOAD;
}

View File

@@ -0,0 +1,56 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
/**
* Used to annotate the <code>get<em>PortName</em>()</code>
* methods of a generated service interface.
*
* <p>The information specified in this annotation is sufficient
* to uniquely identify a <code>wsdl:port</code> element
* inside a <code>wsdl:service</code>. The latter is
* determined based on the value of the <code>WebServiceClient</code>
* annotation on the generated service interface itself.
*
* @since JAX-WS 2.0
*
* @see javax.xml.ws.WebServiceClient
**/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebEndpoint {
/**
* The local name of the endpoint.
**/
String name() default "";
}

View File

@@ -0,0 +1,67 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
/**
* Used to annotate service specific exception classes to customize
* to the local and namespace name of the fault element and the name
* of the fault bean.
*
* @since JAX-WS 2.0
**/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebFault {
/**
* Element's local name.
**/
public String name() default "";
/**
* Element's namespace name.
**/
public String targetNamespace() default "";
/**
* Fault bean name.
**/
public String faultBean() default "";
/**
* wsdl:Message's name. Default name is the exception's class name.
* @since JAX-WS 2.2
*/
public String messageName() default "";
}

View File

@@ -0,0 +1,63 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
/**
* Used to annotate a generated service interface.
*
* <p>The information specified in this annotation is sufficient
* to uniquely identify a <code>wsdl:service</code>
* element inside a WSDL document. This <code>wsdl:service</code>
* element represents the Web service for which the generated
* service interface provides a client view.
*
* @since JAX-WS 2.0
**/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServiceClient {
/**
* The local name of the Web service.
**/
String name() default "";
/**
* The namespace for the Web service.
**/
String targetNamespace() default "";
/**
* The location of the WSDL document for the service (a URL).
**/
String wsdlLocation() default "";
}

View File

@@ -0,0 +1,151 @@
/*
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.security.Principal;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.wsaddressing.W3CEndpointReference;
import org.w3c.dom.Element;
/**
* A <code>WebServiceContext</code> makes it possible for
* a web service endpoint implementation class to access
* message context and security information relative to
* a request being served.
*
* Typically a <code>WebServiceContext</code> is injected
* into an endpoint implementation class using the
* <code>Resource</code> annotation.
*
* @since JAX-WS 2.0
*
* @see javax.annotation.Resource
**/
public interface WebServiceContext {
/**
* Returns the <code>MessageContext</code> for the request being served
* at the time this method is called. Only properties with
* APPLICATION scope will be visible to the application.
*
* @return MessageContext The message context.
*
* @throws IllegalStateException This exception is thrown
* if the method is called while no request is
* being serviced.
*
* @see javax.xml.ws.handler.MessageContext
* @see javax.xml.ws.handler.MessageContext.Scope
* @see java.lang.IllegalStateException
**/
public MessageContext getMessageContext();
/**
* Returns the Principal that identifies the sender
* of the request currently being serviced. If the
* sender has not been authenticated, the method
* returns <code>null</code>.
*
* @return Principal The principal object.
*
* @throws IllegalStateException This exception is thrown
* if the method is called while no request is
* being serviced.
*
* @see java.security.Principal
* @see java.lang.IllegalStateException
**/
public Principal getUserPrincipal();
/**
* Returns a boolean indicating whether the
* authenticated user is included in the specified
* logical role. If the user has not been
* authenticated, the method returns <code>false</code>.
*
* @param role A <code>String</code> specifying the name of the role
*
* @return a <code>boolean</code> indicating whether
* the sender of the request belongs to a given role
*
* @throws IllegalStateException This exception is thrown
* if the method is called while no request is
* being serviced.
**/
public boolean isUserInRole(String role);
/**
* Returns the <code>EndpointReference</code> for this
* endpoint.
* <p>
* If the {@link Binding} for this <code>bindingProvider</code> is
* either SOAP1.1/HTTP or SOAP1.2/HTTP, then a
* <code>W3CEndpointReference</code> MUST be returned.
*
* @param referenceParameters Reference parameters to be associated with the
* returned <code>EndpointReference</code> instance.
* @return EndpointReference of the endpoint associated with this
* <code>WebServiceContext</code>.
* If the returned <code>EndpointReference</code> is of type
* <code>W3CEndpointReference</code> then it MUST contain the
* the specified <code>referenceParameters</code>.
*
* @throws IllegalStateException This exception is thrown
* if the method is called while no request is
* being serviced.
*
* @see W3CEndpointReference
*
* @since JAX-WS 2.1
*/
public EndpointReference getEndpointReference(Element... referenceParameters);
/**
* Returns the <code>EndpointReference</code> associated with
* this endpoint.
*
* @param clazz The type of <code>EndpointReference</code> that
* MUST be returned.
* @param referenceParameters Reference parameters to be associated with the
* returned <code>EndpointReference</code> instance.
* @return EndpointReference of type <code>clazz</code> of the endpoint
* associated with this <code>WebServiceContext</code> instance.
* If the returned <code>EndpointReference</code> is of type
* <code>W3CEndpointReference</code> then it MUST contain the
* the specified <code>referenceParameters</code>.
*
* @throws IllegalStateException This exception is thrown
* if the method is called while no request is
* being serviced.
* @throws WebServiceException If the <code>clazz</code> type of
* <code>EndpointReference</code> is not supported.
*
* @since JAX-WS 2.1
**/
public <T extends EndpointReference> T getEndpointReference(Class<T> clazz,
Element... referenceParameters);
}

View File

@@ -0,0 +1,79 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
/** The <code>WebServiceException</code> class is the base
* exception class for all JAX-WS API runtime exceptions.
*
* @since JAX-WS 2.0
**/
public class WebServiceException extends java.lang.RuntimeException {
/** Constructs a new exception with <code>null</code> as its
* detail message. The cause is not initialized.
**/
public WebServiceException() {
super();
}
/** Constructs a new exception with the specified detail
* message. The cause is not initialized.
* @param message The detail message which is later
* retrieved using the getMessage method
**/
public WebServiceException(String message) {
super(message);
}
/** Constructs a new exception with the specified detail
* message and cause.
*
* @param message The detail message which is later retrieved
* using the getMessage method
* @param cause The cause which is saved for the later
* retrieval throw by the getCause method
**/
public WebServiceException(String message, Throwable cause) {
super(message,cause);
}
/** Constructs a new WebServiceException with the specified cause
* and a detail message of <tt>(cause==null ? null :
* cause.toString())</tt> (which typically contains the
* class and detail message of <tt>cause</tt>).
*
* @param cause The cause which is saved for the later
* retrieval throw by the getCause method.
* (A <tt>null</tt> value is permitted, and
* indicates that the cause is nonexistent or
* unknown.)
**/
public WebServiceException(Throwable cause) {
super(cause);
}
}

View File

@@ -0,0 +1,81 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
/**
* A WebServiceFeature is used to represent a feature that can be
* enabled or disabled for a web service.
* <p>
* The JAX-WS specification will define some standard features and
* JAX-WS implementors are free to define additional features if
* necessary. Vendor specific features may not be portable so
* caution should be used when using them. Each Feature definition
* MUST define a <code>public static final String ID</code>
* that can be used in the Feature annotation to refer
* to the feature. This ID MUST be unique across all features
* of all vendors. When defining a vendor specific feature ID,
* use a vendor specific namespace in the ID string.
*
* @see javax.xml.ws.RespectBindingFeature
* @see javax.xml.ws.soap.AddressingFeature
* @see javax.xml.ws.soap.MTOMFeature
*
* @since 2.1
*/
public abstract class WebServiceFeature {
/**
* Each Feature definition MUST define a public static final
* String ID that can be used in the Feature annotation to refer
* to the feature.
*/
// public static final String ID = "some unique feature Identifier";
/**
* Get the unique identifier for this WebServiceFeature.
*
* @return the unique identifier for this feature.
*/
public abstract String getID();
/**
* Specifies if the feature is enabled or disabled
*/
protected boolean enabled = false;
protected WebServiceFeature(){}
/**
* Returns <code>true</code> if this feature is enabled.
*
* @return <code>true</code> if and only if the feature is enabled .
*/
public boolean isEnabled() {
return enabled;
}
}

View File

@@ -0,0 +1,85 @@
/*
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.security.BasicPermission;
/**
* This class defines web service permissions.
* <p>
* Web service Permissions are identified by name (also referred to as
* a "target name") alone. There are no actions associated
* with them.
* <p>
* The following permission target name is defined:
* <p>
* <dl>
* <dt>publishEndpoint
* </dl>
* <p>
* The <code>publishEndpoint</code> permission allows publishing a
* web service endpoint using the <code>publish</code> methods
* defined by the <code>javax.xml.ws.Endpoint</code> class.
* <p>
* Granting <code>publishEndpoint</code> allows the application to be
* exposed as a network service. Depending on the security of the runtime and
* the security of the application, this may introduce a security hole that
* is remotely exploitable.
*
* @see javax.xml.ws.Endpoint
* @see java.security.BasicPermission
* @see java.security.Permission
* @see java.security.Permissions
* @see java.lang.SecurityManager
* @see java.net.SocketPermission
*/
public final class WebServicePermission extends BasicPermission {
private static final long serialVersionUID = -146474640053770988L;
/**
* Creates a new permission with the specified name.
*
* @param name the name of the <code>WebServicePermission</code>
*/
public WebServicePermission(String name) {
super(name);
}
/**
* Creates a new permission with the specified name and actions.
*
* The <code>actions</code> parameter is currently unused and
* it should be <code>null</code>.
*
* @param name the name of the <code>WebServicePermission</code>
* @param actions should be <code>null</code>
*/
public WebServicePermission(String name, String actions) {
super(name, actions);
}
}

View File

@@ -0,0 +1,62 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
/**
* Used to annotate a Provider implementation class.
*
* @since JAX-WS 2.0
* @see javax.xml.ws.Provider
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServiceProvider {
/**
* Location of the WSDL description for the service.
*/
String wsdlLocation() default "";
/**
* Service name.
*/
String serviceName() default "";
/**
* Target namespace for the service
*/
String targetNamespace() default "";
/**
* Port name.
*/
String portName() default "";
}

View File

@@ -0,0 +1,150 @@
/*
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import javax.xml.ws.soap.Addressing;
import javax.xml.ws.spi.WebServiceFeatureAnnotation;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* The <code>WebServiceRef</code> annotation is used to
* define a reference to a web service and
* (optionally) an injection target for it.
* It can be used to inject both service and proxy
* instances. These injected references are not thread safe.
* If the references are accessed by multiple threads,
* usual synchronization techinques can be used to
* support multiple threads.
*
* <p>
* Web service references are resources in the Java EE 5 sense.
* The annotations (for example, {@link Addressing}) annotated with
* meta-annotation {@link WebServiceFeatureAnnotation}
* can be used in conjunction with <code>WebServiceRef</code>.
* The created reference MUST be configured with annotation's web service
* feature.
*
* <p>
* For example, in the code below, the injected
* <code>StockQuoteProvider</code> proxy MUST
* have WS-Addressing enabled as specifed by the
* {@link Addressing}
* annotation.
*
* <pre><code>
* public class MyClient {
* &#64;Addressing
* &#64;WebServiceRef(StockQuoteService.class)
* private StockQuoteProvider stockQuoteProvider;
* ...
* }
* </code></pre>
*
* <p>
* If a JAX-WS implementation encounters an unsupported or unrecognized
* annotation annotated with the <code>WebServiceFeatureAnnotation</code>
* that is specified with <code>WebServiceRef</code>, an ERROR MUST be given.
*
* @see javax.annotation.Resource
* @see WebServiceFeatureAnnotation
*
* @since JAX-WS 2.0
*
**/
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServiceRef {
/**
* The JNDI name of the resource. For field annotations,
* the default is the field name. For method annotations,
* the default is the JavaBeans property name corresponding
* to the method. For class annotations, there is no default
* and this MUST be specified.
*
* The JNDI name can be absolute(with any logical namespace) or relative
* to JNDI <code>java:comp/env</code> namespace.
*/
String name() default "";
/**
* The Java type of the resource. For field annotations,
* the default is the type of the field. For method annotations,
* the default is the type of the JavaBeans property.
* For class annotations, there is no default and this MUST be
* specified.
*/
Class<?> type() default Object.class;
/**
* A product specific name that this resource should be mapped to.
* The name of this resource, as defined by the <code>name</code>
* element or defaulted, is a name that is local to the application
* component using the resource. (When a relative JNDI name
* is specified, then it's a name in the JNDI
* <code>java:comp/env</code> namespace.) Many application servers
* provide a way to map these local names to names of resources
* known to the application server. This mapped name is often a
* <i>global</i> JNDI name, but may be a name of any form.
* <p>
* Application servers are not required to support any particular
* form or type of mapped name, nor the ability to use mapped names.
* The mapped name is product-dependent and often installation-dependent.
* No use of a mapped name is portable.
*/
String mappedName() default "";
/**
* The service class, alwiays a type extending
* <code>javax.xml.ws.Service</code>. This element MUST be specified
* whenever the type of the reference is a service endpoint interface.
*/
// 2.1 has Class value() default Object.class;
// Fixing this raw Class type correctly in 2.2 API. This shouldn't cause
// any compatibility issues for applications.
Class<? extends Service> value() default Service.class;
/**
* A URL pointing to the WSDL document for the web service.
* If not specified, the WSDL location specified by annotations
* on the resource type is used instead.
*/
String wsdlLocation() default "";
/**
* A portable JNDI lookup name that resolves to the target
* web service reference.
*
* @since JAX-WS 2.2
*/
String lookup() default "";
}

View File

@@ -0,0 +1,83 @@
/*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
/**
* The <code>WebServiceRefs</code> annotation allows
* multiple web service references to be declared at the
* class level.
*
* <p>
* It can be used to inject both service and proxy
* instances. These injected references are not thread safe.
* If the references are accessed by multiple threads,
* usual synchronization techniques can be used to
* support multiple threads.
*
* <p>
* There is no way to associate web service features with
* the injected instances. If an instance needs to be
* configured with web service features, use @WebServiceRef
* to inject the resource along with its features.
*
* <p>
* <b>Example</b>: The <code>StockQuoteProvider</code>
* proxy instance, and the <code>StockQuoteService</code> service
* instance are injected using @WebServiceRefs.
*
* <pre><code>
* &#64;WebServiceRefs({&#64;WebServiceRef(name="service/stockquoteservice", value=StockQuoteService.class),
* &#64;WebServiceRef(name="service/stockquoteprovider", type=StockQuoteProvider.class, value=StockQuoteService.class})
* public class MyClient {
* void init() {
* Context ic = new InitialContext();
* StockQuoteService service = (StockQuoteService) ic.lookup("java:comp/env/service/stockquoteservice");
* StockQuoteProvider port = (StockQuoteProvider) ic.lookup("java:comp/env/service/stockquoteprovider");
* ...
* }
* ...
* }
* </code></pre>
*
* @see WebServiceRef
* @since 2.0
*/
@Documented
@Retention(RUNTIME)
@Target(TYPE)
public @interface WebServiceRefs {
/**
* Array used for multiple web service reference declarations.
*/
WebServiceRef[] value();
}

View File

@@ -0,0 +1,87 @@
/*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.handler;
import javax.xml.ws.ProtocolException;
import javax.xml.ws.handler.MessageContext;
/** The <code>Handler</code> interface
* is the base interface for JAX-WS handlers.
*
* @since JAX-WS 2.0
**/
public interface Handler<C extends MessageContext> {
/** The <code>handleMessage</code> method is invoked for normal processing
* of inbound and outbound messages. Refer to the description of the handler
* framework in the JAX-WS specification for full details.
*
* @param context the message context.
* @return An indication of whether handler processing should continue for
* the current message
* <ul>
* <li>Return <code>true</code> to continue
* processing.</li>
* <li>Return <code>false</code> to block
* processing.</li>
* </ul>
* @throws RuntimeException Causes the JAX-WS runtime to cease
* handler processing and generate a fault.
* @throws ProtocolException Causes the JAX-WS runtime to switch to
* fault message processing.
**/
public boolean handleMessage(C context);
/** The <code>handleFault</code> method is invoked for fault message
* processing. Refer to the description of the handler
* framework in the JAX-WS specification for full details.
*
* @param context the message context
* @return An indication of whether handler fault processing should continue
* for the current message
* <ul>
* <li>Return <code>true</code> to continue
* processing.</li>
* <li>Return <code>false</code> to block
* processing.</li>
* </ul>
* @throws RuntimeException Causes the JAX-WS runtime to cease
* handler fault processing and dispatch the fault.
* @throws ProtocolException Causes the JAX-WS runtime to cease
* handler fault processing and dispatch the fault.
**/
public boolean handleFault(C context);
/**
* Called at the conclusion of a message exchange pattern just prior to
* the JAX-WS runtime dispatching a message, fault or exception. Refer to
* the description of the handler
* framework in the JAX-WS specification for full details.
*
* @param context the message context
**/
public void close(MessageContext context);
}

View File

@@ -0,0 +1,53 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.handler;
/**
* <code>HandlerResolver</code> is an interface implemented
* by an application to get control over the handler chain
* set on proxy/dispatch objects at the time of their creation.
* <p>
* A <code>HandlerResolver</code> may be set on a <code>Service</code>
* using the <code>setHandlerResolver</code> method.
* <p>
* When the runtime invokes a <code>HandlerResolver</code>, it will
* pass it a <code>PortInfo</code> object containing information
* about the port that the proxy/dispatch object will be accessing.
*
* @see javax.xml.ws.Service#setHandlerResolver
*
* @since JAX-WS 2.0
**/
public interface HandlerResolver {
/**
* Gets the handler chain for the specified port.
*
* @param portInfo Contains information about the port being accessed.
* @return java.util.List&lt;Handler> chain
**/
public java.util.List<Handler> getHandlerChain(PortInfo portInfo);
}

View File

@@ -0,0 +1,34 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.handler;
/** The <code>LogicalHandler</code> extends
* Handler to provide typesafety for the message context parameter.
*
* @since JAX-WS 2.0
**/
public interface LogicalHandler<C extends LogicalMessageContext> extends Handler<C> {
}

View File

@@ -0,0 +1,46 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.handler;
import javax.xml.ws.LogicalMessage;
/** The <code>LogicalMessageContext</code> interface extends
* <code>MessageContext</code> to
* provide access to a the contained message as a protocol neutral
* LogicalMessage
*
* @since JAX-WS 2.0
**/
public interface LogicalMessageContext
extends MessageContext {
/** Gets the message from this message context
*
* @return The contained message; returns <code>null</code> if no
* message is present in this message context
**/
public LogicalMessage getMessage();
}

View File

@@ -0,0 +1,205 @@
/*
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.handler;
import java.util.Map;
/**
* The interface <code>MessageContext</code> abstracts the message
* context that is processed by a handler in the <code>handle</code>
* method.
*
* <p>The <code>MessageContext</code> interface provides methods to
* manage a property set. <code>MessageContext</code> properties
* enable handlers in a handler chain to share processing related
* state.
*
* @since JAX-WS 2.0
*/
public interface MessageContext extends Map<String, Object> {
/**
* Standard property: message direction, <code>true</code> for
* outbound messages, <code>false</code> for inbound.
* <p>Type: boolean
*/
public static final String MESSAGE_OUTBOUND_PROPERTY =
"javax.xml.ws.handler.message.outbound";
/**
* Standard property: Map of attachments to a message for the inbound
* message, key is the MIME Content-ID, value is a DataHandler.
* <p>Type: java.util.Map&lt;String,DataHandler>
*/
public static final String INBOUND_MESSAGE_ATTACHMENTS =
"javax.xml.ws.binding.attachments.inbound";
/**
* Standard property: Map of attachments to a message for the outbound
* message, key is the MIME Content-ID, value is a DataHandler.
* <p>Type: java.util.Map&lt;String,DataHandler>
*/
public static final String OUTBOUND_MESSAGE_ATTACHMENTS =
"javax.xml.ws.binding.attachments.outbound";
/**
* Standard property: input source for WSDL document.
* <p>Type: org.xml.sax.InputSource
*/
public static final String WSDL_DESCRIPTION =
"javax.xml.ws.wsdl.description";
/**
* Standard property: name of WSDL service.
* <p>Type: javax.xml.namespace.QName
*/
public static final String WSDL_SERVICE =
"javax.xml.ws.wsdl.service";
/**
* Standard property: name of WSDL port.
* <p>Type: javax.xml.namespace.QName
*/
public static final String WSDL_PORT =
"javax.xml.ws.wsdl.port";
/**
* Standard property: name of wsdl interface (2.0) or port type (1.1).
* <p>Type: javax.xml.namespace.QName
*/
public static final String WSDL_INTERFACE =
"javax.xml.ws.wsdl.interface";
/**
* Standard property: name of WSDL operation.
* <p>Type: javax.xml.namespace.QName
*/
public static final String WSDL_OPERATION =
"javax.xml.ws.wsdl.operation";
/**
* Standard property: HTTP response status code.
* <p>Type: java.lang.Integer
*/
public static final String HTTP_RESPONSE_CODE =
"javax.xml.ws.http.response.code";
/**
* Standard property: HTTP request headers.
* <p>Type: java.util.Map&lt;java.lang.String, java.util.List&lt;java.lang.String>>
*/
public static final String HTTP_REQUEST_HEADERS =
"javax.xml.ws.http.request.headers";
/**
* Standard property: HTTP response headers.
* <p>Type: java.util.Map&lt;java.lang.String, java.util.List&lt;java.lang.String>>
*/
public static final String HTTP_RESPONSE_HEADERS =
"javax.xml.ws.http.response.headers";
/**
* Standard property: HTTP request method.
* <p>Type: java.lang.String
*/
public static final String HTTP_REQUEST_METHOD =
"javax.xml.ws.http.request.method";
/**
* Standard property: servlet request object.
* <p>Type: javax.servlet.http.HttpServletRequest
*/
public static final String SERVLET_REQUEST =
"javax.xml.ws.servlet.request";
/**
* Standard property: servlet response object.
* <p>Type: javax.servlet.http.HttpServletResponse
*/
public static final String SERVLET_RESPONSE =
"javax.xml.ws.servlet.response";
/**
* Standard property: servlet context object.
* <p>Type: javax.servlet.ServletContext
*/
public static final String SERVLET_CONTEXT =
"javax.xml.ws.servlet.context";
/**
* Standard property: Query string for request.
* <p>Type: String
**/
public static final String QUERY_STRING =
"javax.xml.ws.http.request.querystring";
/**
* Standard property: Request Path Info
* <p>Type: String
*/
public static final String PATH_INFO =
"javax.xml.ws.http.request.pathinfo";
/**
* Standard property: WS Addressing Reference Parameters.
* The list MUST include all SOAP headers marked with the
* wsa:IsReferenceParameter="true" attribute.
* <p>Type: List&lt;Element>
*
* @since JAX-WS 2.1
*/
public static final String REFERENCE_PARAMETERS =
"javax.xml.ws.reference.parameters";
/**
* Property scope. Properties scoped as <code>APPLICATION</code> are
* visible to handlers,
* client applications and service endpoints; properties scoped as
* <code>HANDLER</code>
* are only normally visible to handlers.
*/
public enum Scope {APPLICATION, HANDLER};
/**
* Sets the scope of a property.
*
* @param name Name of the property associated with the
* <code>MessageContext</code>
* @param scope Desired scope of the property
* @throws java.lang.IllegalArgumentException if an illegal
* property name is specified
*/
public void setScope(String name, Scope scope);
/**
* Gets the scope of a property.
*
* @param name Name of the property
* @return Scope of the property
* @throws java.lang.IllegalArgumentException if a non-existant
* property name is specified
*/
public Scope getScope(String name);
}

View File

@@ -0,0 +1,66 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.handler;
import javax.xml.namespace.QName;
/**
* The <code>PortInfo</code> interface is used by a
* <code>HandlerResolver</code> to query information about
* the port it is being asked to create a handler chain for.
* <p>
* This interface is never implemented by an application,
* only by a JAX-WS implementation.
*
* @since JAX-WS 2.0
**/
public interface PortInfo {
/**
* Gets the qualified name of the WSDL service name containing
* the port being accessed.
*
* @return javax.xml.namespace.QName The qualified name of the WSDL service.
**/
public QName getServiceName();
/**
* Gets the qualified name of the WSDL port being accessed.
*
* @return javax.xml.namespace.QName The qualified name of the WSDL port.
**/
public QName getPortName();
/**
* Gets the URI identifying the binding used by the port being accessed.
*
* @return String The binding identifier for the port.
*
* @see javax.xml.ws.Binding
**/
public String getBindingID();
}

View File

@@ -0,0 +1,49 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.handler.soap;
import javax.xml.namespace.QName;
import javax.xml.ws.handler.Handler;
import java.util.Set;
/** The <code>SOAPHandler</code> class extends <code>Handler</code>
* to provide typesafety for the message context parameter and add a method
* to obtain access to the headers that may be processed by the handler.
*
* @since JAX-WS 2.0
**/
public interface SOAPHandler<T extends SOAPMessageContext>
extends Handler<T> {
/** Gets the header blocks that can be processed by this Handler
* instance.
*
* @return Set of <code>QNames</code> of header blocks processed by this
* handler instance. <code>QName</code> is the qualified
* name of the outermost element of the Header block.
**/
Set<QName> getHeaders();
}

View File

@@ -0,0 +1,99 @@
/*
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.handler.soap;
import javax.xml.soap.SOAPMessage;
import javax.xml.bind.JAXBContext;
import javax.xml.namespace.QName;
import java.util.Set;
/** The interface <code>SOAPMessageContext</code>
* provides access to the SOAP message for either RPC request or
* response. The <code>javax.xml.soap.SOAPMessage</code> specifies
* the standard Java API for the representation of a SOAP 1.1 message
* with attachments.
*
* @see javax.xml.soap.SOAPMessage
*
* @since JAX-WS 2.0
**/
public interface SOAPMessageContext
extends javax.xml.ws.handler.MessageContext {
/** Gets the <code>SOAPMessage</code> from this message context. Modifications
* to the returned <code>SOAPMessage</code> change the message in-place, there
* is no need to subsequently call <code>setMessage</code>.
*
* @return Returns the <code>SOAPMessage</code>; returns <code>null</code> if no
* <code>SOAPMessage</code> is present in this message context
**/
public SOAPMessage getMessage();
/** Sets the SOAPMessage in this message context
*
* @param message SOAP message
* @throws WebServiceException If any error during the setting
* of the <code>SOAPMessage</code> in this message context
* @throws java.lang.UnsupportedOperationException If this
* operation is not supported
**/
public void setMessage(SOAPMessage message);
/** Gets headers that have a particular qualified name from the message in the
* message context. Note that a SOAP message can contain multiple headers
* with the same qualified name.
*
* @param header The XML qualified name of the SOAP header(s).
* @param context The JAXBContext that should be used to unmarshall the
* header
* @param allRoles If <code>true</code> then returns headers for all SOAP
* roles, if <code>false</code> then only returns headers targetted
* at the roles currently being played by this SOAP node, see
* <code>getRoles</code>.
* @return An array of unmarshalled headers; returns an empty array if no
* message is present in this message context or no headers match
* the supplied qualified name.
* @throws WebServiceException If an error occurs when using the supplied
* <code>JAXBContext</code> to unmarshall. The cause of
* the <code>WebServiceException</code> is the original <code>JAXBException</code>.
**/
public Object[] getHeaders(QName header, JAXBContext context,
boolean allRoles);
/** Gets the SOAP actor roles associated with an execution
* of the handler chain.
* Note that SOAP actor roles apply to the SOAP node and
* are managed using {@link javax.xml.ws.soap.SOAPBinding#setRoles} and
* {@link javax.xml.ws.soap.SOAPBinding#getRoles}. <code>Handler</code> instances in
* the handler chain use this information about the SOAP actor
* roles to process the SOAP header blocks. Note that the
* SOAP actor roles are invariant during the processing of
* SOAP message through the handler chain.
*
* @return Array of <code>String</code> for SOAP actor roles
**/
public Set<String> getRoles();
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.http;
import javax.xml.ws.Binding;
/** The <code>HTTPBinding</code> interface is an
* abstraction for the XML/HTTP binding.
*
* @since JAX-WS 2.0
**/
public interface HTTPBinding extends Binding {
/**
* A constant representing the identity of the XML/HTTP binding.
*/
public static final String HTTP_BINDING = "http://www.w3.org/2004/08/wsdl/http";
}

View File

@@ -0,0 +1,56 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.http;
/** The <code>HTTPException</code> exception represents a
* XML/HTTP fault.
*
* <p>Since there is no standard format for faults or exceptions
* in XML/HTTP messaging, only the HTTP status code is captured.
*
* @since JAX-WS 2.0
**/
public class HTTPException extends javax.xml.ws.ProtocolException {
private int statusCode;
/** Constructor for the HTTPException
* @param statusCode <code>int</code> for the HTTP status code
**/
public HTTPException(int statusCode) {
super();
this.statusCode = statusCode;
}
/** Gets the HTTP status code.
*
* @return HTTP status code
**/
public int getStatusCode() {
return statusCode;
}
}

View File

@@ -0,0 +1,113 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.soap;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.WebServiceRef;
import javax.xml.ws.WebServiceRefs;
import javax.xml.ws.WebServiceProvider;
import javax.xml.ws.soap.AddressingFeature.Responses;
import javax.xml.ws.spi.WebServiceFeatureAnnotation;
/**
* This annotation represents the use of WS-Addressing with either
* the SOAP 1.1/HTTP or SOAP 1.2/HTTP binding. Using this annotation
* with any other binding is undefined.
* <p>
* This annotation MUST only be used in conjunction with the
* {@link javax.jws.WebService}, {@link WebServiceProvider},
* and {@link WebServiceRef} annotations.
* When used with a <code>javax.jws.WebService</code> annotation, this
* annotation MUST only be used on the service endpoint implementation
* class.
* When used with a <code>WebServiceRef</code> annotation, this annotation
* MUST only be used when a proxy instance is created. The injected SEI
* proxy, and endpoint MUST honor the values of the <code>Addressing</code>
* annotation.
* <p>
* This annotation's behaviour is defined by the corresponding feature
* {@link AddressingFeature}.
*
* @since JAX-WS 2.1
*/
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@WebServiceFeatureAnnotation(id=AddressingFeature.ID,bean=AddressingFeature.class)
public @interface Addressing {
/**
* Specifies if this feature is enabled or disabled. If enabled, it means
* the endpoint supports WS-Addressing but does not require its use.
* Corresponding
* <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyaddressing">
* 3.1.1 Addressing Assertion</a> must be generated in the generated WSDL.
*/
boolean enabled() default true;
/**
* If addressing is enabled, this property determines whether the endpoint
* requires WS-Addressing. If required is true, the endpoint requires
* WS-Addressing and WS-Addressing headers MUST
* be present on incoming messages. A corresponding
* <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyaddressing">
* 3.1.1 Addressing Assertion</a> must be generated in the WSDL.
*/
boolean required() default false;
/**
* If addressing is enabled, this property determines whether endpoint
* requires the use of anonymous responses, or non-anonymous responses,
* or all.
*
* <p>
* {@link Responses#ALL} supports all response types and this is the
* default value.
*
* <p>
* {@link Responses#ANONYMOUS} requires the use of only anonymous
* responses. It will result into wsam:AnonymousResponses nested assertion
* as specified in
* <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyanonresponses">
* 3.1.2 AnonymousResponses Assertion</a> in the generated WSDL.
*
* <p>
* {@link Responses#NON_ANONYMOUS} requires the use of only non-anonymous
* responses. It will result into
* wsam:NonAnonymousResponses nested assertion as specified in
* <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicynonanonresponses">
* 3.1.3 NonAnonymousResponses Assertion</a> in the generated WSDL.
*
* @since JAX-WS 2.2
*/
Responses responses() default Responses.ALL;
}

View File

@@ -0,0 +1,277 @@
/*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.soap;
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.Endpoint;
import javax.xml.ws.Service;
/**
* AddressingFeature represents the use of WS-Addressing with either
* the SOAP 1.1/HTTP or SOAP 1.2/HTTP binding. Using this feature
* with any other binding is undefined.
* <p>
* This feature can be used during the creation of SEI proxy, and
* {@link javax.xml.ws.Dispatch} instances on the client side and {@link Endpoint}
* instances on the server side. This feature cannot be used for {@link Service}
* instance creation on the client side.
* <p>
* The following describes the effects of this feature with respect
* to be enabled or disabled:
* <ul>
* <li> ENABLED: In this Mode, WS-Addressing will be enabled. It means
* the endpoint supports WS-Addressing but does not require its use.
* A sender could send messages with WS-Addressing headers or without
* WS-Addressing headers. But a receiver MUST consume both types of
* messages.
* <li> DISABLED: In this Mode, WS-Addressing will be disabled.
* At runtime, WS-Addressing headers MUST NOT be used by a sender or
* receiver.
* </ul>
* <p>
* If the feature is enabled, the <code>required</code> property determines
* whether the endpoint requires WS-Addressing. If it is set true,
* WS-Addressing headers MUST be present on incoming and outgoing messages.
* By default the <code>required</code> property is <code>false</code>.
*
* <p>
* If the web service developer has not explicitly enabled this feature,
* WSDL's wsam:Addressing policy assertion is used to find
* the use of WS-Addressing. By using the feature explicitly, an application
* overrides WSDL's indication of the use of WS-Addressing. In some cases,
* this is really required. For example, if an application has implemented
* WS-Addressing itself, it can use this feature to disable addressing. That
* means a JAX-WS implementation doesn't consume or produce WS-Addressing
* headers.
*
* <p>
* If addressing is enabled, a corresponding wsam:Addressing policy assertion
* must be generated in the WSDL as per
* <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyassertions">
* 3.1 WS-Policy Assertions</a>
*
* <p>
* <b>Example 1: </b>Possible Policy Assertion in the generated WSDL for
* <code>&#64;Addressing</code>
* <pre>
* &lt;wsam:Addressing wsp:Optional="true">
* &lt;wsp:Policy/>
* &lt;/wsam:Addressing>
* </pre>
*
* <p>
* <b>Example 2: </b>Possible Policy Assertion in the generated WSDL for
* <code>&#64;Addressing(required=true)</code>
* <pre>
* &lt;wsam:Addressing>
* &lt;wsp:Policy/>
* &lt;/wsam:Addressing>
* </pre>
*
* <p>
* <b>Example 3: </b>Possible Policy Assertion in the generated WSDL for
* <code>&#64;Addressing(required=true, responses=Responses.ANONYMOUS)</code>
* <pre>
* &lt;wsam:Addressing>
* &lt;wsp:Policy>
* &lt;wsam:AnonymousResponses/>
* &lt;/wsp:Policy>
* &lt;/wsam:Addressing>
* </pre>
*
* <p>
* See <a href="http://www.w3.org/TR/2006/REC-ws-addr-core-20060509/">
* Web Services Addressing - Core</a>,
* <a href="http://www.w3.org/TR/2006/REC-ws-addr-soap-20060509/">
* Web Services Addressing 1.0 - SOAP Binding</a>,
* and <a href="http://www.w3.org/TR/ws-addr-metadata/">
* Web Services Addressing 1.0 - Metadata</a>
* for more information on WS-Addressing.
*
* @see Addressing
* @since JAX-WS 2.1
*/
public final class AddressingFeature extends WebServiceFeature {
/**
* Constant value identifying the AddressingFeature
*/
public static final String ID = "http://www.w3.org/2005/08/addressing/module";
/**
* If addressing is enabled, this property determines whether the endpoint
* requires WS-Addressing. If required is true, WS-Addressing headers MUST
* be present on incoming and outgoing messages.
*/
// should be private final, keeping original modifier due to backwards compatibility
protected boolean required;
/**
* If addressing is enabled, this property determines if endpoint requires
* the use of only anonymous responses, or only non-anonymous responses, or all.
*
* <p>
* {@link Responses#ALL} supports all response types and this is the default
* value.
*
* <p>
* {@link Responses#ANONYMOUS} requires the use of only anonymous
* responses. It will result into wsam:AnonymousResponses nested assertion
* as specified in
* <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyanonresponses">
* 3.1.2 AnonymousResponses Assertion</a> in the generated WSDL.
*
* <p>
* {@link Responses#NON_ANONYMOUS} requires the use of only non-anonymous
* responses. It will result into
* wsam:NonAnonymousResponses nested assertion as specified in
* <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicynonanonresponses">
* 3.1.3 NonAnonymousResponses Assertion</a> in the generated WSDL.
*
* @since JAX-WS 2.2
*/
public enum Responses {
/**
* Specifies the use of only anonymous
* responses. It will result into wsam:AnonymousResponses nested assertion
* as specified in
* <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyanonresponses">
* 3.1.2 AnonymousResponses Assertion</a> in the generated WSDL.
*/
ANONYMOUS,
/**
* Specifies the use of only non-anonymous
* responses. It will result into
* wsam:NonAnonymousResponses nested assertion as specified in
* <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicynonanonresponses">
* 3.1.3 NonAnonymousResponses Assertion</a> in the generated WSDL.
*/
NON_ANONYMOUS,
/**
* Supports all response types and this is the default
*/
ALL
}
private final Responses responses;
/**
* Creates and configures an <code>AddressingFeature</code> with the
* use of addressing requirements. The created feature enables
* ws-addressing i.e. supports ws-addressing but doesn't require
* its use. It is also configured to accept all the response types.
*/
public AddressingFeature() {
this(true, false, Responses.ALL);
}
/**
* Creates and configures an <code>AddressingFeature</code> with the
* use of addressing requirements. If <code>enabled</code> is true,
* it enables ws-addressing i.e. supports ws-addressing but doesn't
* require its use. It also configures to accept all the response types.
*
* @param enabled true enables ws-addressing i.e.ws-addressing
* is supported but doesn't require its use
*/
public AddressingFeature(boolean enabled) {
this(enabled, false, Responses.ALL);
}
/**
* Creates and configures an <code>AddressingFeature</code> with the
* use of addressing requirements. If <code>enabled</code> and
* <code>required</code> are true, it enables ws-addressing and
* requires its use. It also configures to accept all the response types.
*
* @param enabled true enables ws-addressing i.e.ws-addressing
* is supported but doesn't require its use
* @param required true means requires the use of ws-addressing .
*/
public AddressingFeature(boolean enabled, boolean required) {
this(enabled, required, Responses.ALL);
}
/**
* Creates and configures an <code>AddressingFeature</code> with the
* use of addressing requirements. If <code>enabled</code> and
* <code>required</code> are true, it enables ws-addressing and
* requires its use. Also, the response types can be configured using
* <code>responses</code> parameter.
*
* @param enabled true enables ws-addressing i.e.ws-addressing
* is supported but doesn't require its use
* @param required true means requires the use of ws-addressing .
* @param responses specifies what type of responses are required
*
* @since JAX-WS 2.2
*/
public AddressingFeature(boolean enabled, boolean required, Responses responses) {
this.enabled = enabled;
this.required = required;
this.responses = responses;
}
/**
* {@inheritDoc}
*/
public String getID() {
return ID;
}
/**
* If addressing is enabled, this property determines whether the endpoint
* requires WS-Addressing. If required is true, WS-Addressing headers MUST
* be present on incoming and outgoing messages.
*
* @return the current required value
*/
public boolean isRequired() {
return required;
}
/**
* If addressing is enabled, this property determines whether endpoint
* requires the use of anonymous responses, or non-anonymous responses,
* or all responses.
*
* <p>
* @return {@link Responses#ALL} when endpoint supports all types of
* responses,
* {@link Responses#ANONYMOUS} when endpoint requires the use of
* only anonymous responses,
* {@link Responses#NON_ANONYMOUS} when endpoint requires the use
* of only non-anonymous responses
*
* @since JAX-WS 2.2
*/
public Responses getResponses() {
return responses;
}
}

View File

@@ -0,0 +1,75 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.soap;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.xml.ws.spi.WebServiceFeatureAnnotation;
import javax.xml.ws.WebServiceRef;
import javax.xml.ws.WebServiceProvider;
/**
* This feature represents the use of MTOM with a
* web service.
* <p>
* This annotation MUST only be used in conjunction the
* <code>javax.jws.WebService</code>, {@link WebServiceProvider},
* {@link WebServiceRef} annotations.
* When used with the <code>javax.jws.WebService</code> annotation this
* annotation MUST only be used on the service endpoint implementation
* class.
* When used with a <code>WebServiceRef</code> annotation, this annotation
* MUST only be used when a proxy instance is created. The injected SEI
* proxy, and endpoint MUST honor the values of the <code>MTOM</code>
* annotation.
* <p>
*
* This annotation's behaviour is defined by the corresponding feature
* {@link MTOMFeature}.
*
* @since JAX-WS 2.1
*/
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@WebServiceFeatureAnnotation(id=MTOMFeature.ID,bean=MTOMFeature.class)
public @interface MTOM {
/**
* Specifies if this feature is enabled or disabled.
*/
boolean enabled() default true;
/**
* Property for MTOM threshold value. When MTOM is enabled, binary data above this
* size in bytes will be XOP encoded or sent as attachment. The value of this property
* MUST always be >= 0. Default value is 0.
*/
int threshold() default 0;
}

View File

@@ -0,0 +1,144 @@
/*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.soap;
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.Endpoint;
import javax.xml.ws.Service;
/**
* This feature represents the use of MTOM with a
* web service.
*
* This feature can be used during the creation of SEI proxy, and
* {@link javax.xml.ws.Dispatch} instances on the client side and {@link Endpoint}
* instances on the server side. This feature cannot be used for {@link Service}
* instance creation on the client side.
*
* <p>
* The following describes the affects of this feature with respect
* to being enabled or disabled:
* <ul>
* <li> ENABLED: In this Mode, MTOM will be enabled. A receiver MUST accept
* both a non-optimized and an optimized message, and a sender MAY send an
* optimized message, or a non-optimized message. The heuristics used by a
* sender to determine whether to use optimization or not are
* implementation-specific.
* <li> DISABLED: In this Mode, MTOM will be disabled
* </ul>
* <p>
* The {@link #threshold} property can be used to set the threshold
* value used to determine when binary data should be XOP encoded.
*
* @since JAX-WS 2.1
*/
public final class MTOMFeature extends WebServiceFeature {
/**
* Constant value identifying the MTOMFeature
*/
public static final String ID = "http://www.w3.org/2004/08/soap/features/http-optimization";
/**
* Property for MTOM threshold value. This property serves as a hint when
* MTOM is enabled, binary data above this size in bytes SHOULD be sent
* as attachment.
* The value of this property MUST always be >= 0. Default value is 0.
*/
// should be changed to private final, keeping original modifier to keep backwards compatibility
protected int threshold;
/**
* Create an <code>MTOMFeature</code>.
* The instance created will be enabled.
*/
public MTOMFeature() {
this.enabled = true;
this.threshold = 0;
}
/**
* Creates an <code>MTOMFeature</code>.
*
* @param enabled specifies if this feature should be enabled or not
*/
public MTOMFeature(boolean enabled) {
this.enabled = enabled;
this.threshold = 0;
}
/**
* Creates an <code>MTOMFeature</code>.
* The instance created will be enabled.
*
* @param threshold the size in bytes that binary data SHOULD be before
* being sent as an attachment.
*
* @throws WebServiceException if threshold is < 0
*/
public MTOMFeature(int threshold) {
if (threshold < 0)
throw new WebServiceException("MTOMFeature.threshold must be >= 0, actual value: "+threshold);
this.enabled = true;
this.threshold = threshold;
}
/**
* Creates an <code>MTOMFeature</code>.
*
* @param enabled specifies if this feature should be enabled or not
* @param threshold the size in bytes that binary data SHOULD be before
* being sent as an attachment.
*
* @throws WebServiceException if threshold is < 0
*/
public MTOMFeature(boolean enabled, int threshold) {
if (threshold < 0)
throw new WebServiceException("MTOMFeature.threshold must be >= 0, actual value: "+threshold);
this.enabled = enabled;
this.threshold = threshold;
}
/**
* {@inheritDoc}
*/
public String getID() {
return ID;
}
/**
* Gets the threshold value used to determine when binary data
* should be sent as an attachment.
*
* @return the current threshold size in bytes
*/
public int getThreshold() {
return threshold;
}
}

View File

@@ -0,0 +1,110 @@
/*
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.soap;
import java.util.Set;
import javax.xml.ws.Binding;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.MessageFactory;
/** The <code>SOAPBinding</code> interface is an abstraction for
* the SOAP binding.
*
* @since JAX-WS 2.0
**/
public interface SOAPBinding extends Binding {
/**
* A constant representing the identity of the SOAP 1.1 over HTTP binding.
*/
public static final String SOAP11HTTP_BINDING = "http://schemas.xmlsoap.org/wsdl/soap/http";
/**
* A constant representing the identity of the SOAP 1.2 over HTTP binding.
*/
public static final String SOAP12HTTP_BINDING = "http://www.w3.org/2003/05/soap/bindings/HTTP/";
/**
* A constant representing the identity of the SOAP 1.1 over HTTP binding
* with MTOM enabled by default.
*/
public static final String SOAP11HTTP_MTOM_BINDING = "http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true";
/**
* A constant representing the identity of the SOAP 1.2 over HTTP binding
* with MTOM enabled by default.
*/
public static final String SOAP12HTTP_MTOM_BINDING = "http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true";
/** Gets the roles played by the SOAP binding instance.
*
* @return Set&lt;String> The set of roles played by the binding instance.
**/
public Set<String> getRoles();
/** Sets the roles played by the SOAP binding instance.
*
* @param roles The set of roles played by the binding instance.
* @throws WebServiceException On an error in the configuration of
* the list of roles.
**/
public void setRoles(Set<String> roles);
/**
* Returns <code>true</code> if the use of MTOM is enabled.
*
* @return <code>true</code> if and only if the use of MTOM is enabled.
**/
public boolean isMTOMEnabled();
/**
* Enables or disables use of MTOM.
*
* @param flag A <code>boolean</code> specifying whether the use of MTOM should
* be enabled or disabled.
* @throws WebServiceException If the specified setting is not supported
* by this binding instance.
*
**/
public void setMTOMEnabled(boolean flag);
/**
* Gets the SAAJ <code>SOAPFactory</code> instance used by this SOAP binding.
*
* @return SOAPFactory instance used by this SOAP binding.
**/
public SOAPFactory getSOAPFactory();
/**
* Gets the SAAJ <code>MessageFactory</code> instance used by this SOAP binding.
*
* @return MessageFactory instance used by this SOAP binding.
**/
public MessageFactory getMessageFactory();
}

View File

@@ -0,0 +1,75 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.soap;
import javax.xml.soap.SOAPFault;
/** The <code>SOAPFaultException</code> exception represents a
* SOAP 1.1 or 1.2 fault.
*
* <p>A <code>SOAPFaultException</code> wraps a SAAJ <code>SOAPFault</code>
* that manages the SOAP-specific representation of faults.
* The <code>createFault</code> method of
* <code>javax.xml.soap.SOAPFactory</code> may be used to create an instance
* of <code>javax.xml.soap.SOAPFault</code> for use with the
* constructor. <code>SOAPBinding</code> contains an accessor for the
* <code>SOAPFactory</code> used by the binding instance.
*
* <p>Note that the value of <code>getFault</code> is the only part of the
* exception used when searializing a SOAP fault.
*
* <p>Refer to the SOAP specification for a complete
* description of SOAP faults.
*
* @see javax.xml.soap.SOAPFault
* @see javax.xml.ws.soap.SOAPBinding#getSOAPFactory
* @see javax.xml.ws.ProtocolException
*
* @since JAX-WS 2.0
**/
public class SOAPFaultException extends javax.xml.ws.ProtocolException {
private SOAPFault fault;
/** Constructor for SOAPFaultException
* @param fault <code>SOAPFault</code> representing the fault
*
* @see javax.xml.soap.SOAPFactory#createFault
**/
public SOAPFaultException(SOAPFault fault) {
super(fault.getFaultString());
this.fault = fault;
}
/** Gets the embedded <code>SOAPFault</code> instance.
*
* @return <code>javax.xml.soap.SOAPFault</code> SOAP
* fault element
**/
public javax.xml.soap.SOAPFault getFault() {
return this.fault;
}
}

View File

@@ -0,0 +1,216 @@
/*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.spi;
import java.io.*;
import java.util.Properties;
import javax.xml.ws.WebServiceException;
class FactoryFinder {
/**
* Creates an instance of the specified class using the specified
* <code>ClassLoader</code> object.
*
* @exception WebServiceException if the given class could not be found
* or could not be instantiated
*/
private static Object newInstance(String className,
ClassLoader classLoader)
{
try {
Class spiClass = safeLoadClass(className, classLoader);
return spiClass.newInstance();
} catch (ClassNotFoundException x) {
throw new WebServiceException(
"Provider " + className + " not found", x);
} catch (Exception x) {
throw new WebServiceException(
"Provider " + className + " could not be instantiated: " + x,
x);
}
}
/**
* Finds the implementation <code>Class</code> object for the given
* factory name, or if that fails, finds the <code>Class</code> object
* for the given fallback class name. The arguments supplied MUST be
* used in order. If using the first argument is successful, the second
* one will not be used.
* <P>
* This method is package private so that this code can be shared.
*
* @return the <code>Class</code> object of the specified message factory;
* may not be <code>null</code>
*
* @param factoryId the name of the factory to find, which is
* a system property
* @param fallbackClassName the implementation class name, which is
* to be used only if nothing else
* is found; <code>null</code> to indicate that
* there is no fallback class name
* @exception WebServiceException if there is an error
*/
static Object find(String factoryId, String fallbackClassName)
{
if (isOsgi()) {
return lookupUsingOSGiServiceLoader(factoryId);
}
ClassLoader classLoader;
try {
classLoader = Thread.currentThread().getContextClassLoader();
} catch (Exception x) {
throw new WebServiceException(x.toString(), x);
}
String serviceId = "META-INF/services/" + factoryId;
// try to find services in CLASSPATH
BufferedReader rd = null;
try {
InputStream is;
if (classLoader == null) {
is=ClassLoader.getSystemResourceAsStream(serviceId);
} else {
is=classLoader.getResourceAsStream(serviceId);
}
if( is!=null ) {
rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String factoryClassName = rd.readLine();
if (factoryClassName != null &&
! "".equals(factoryClassName)) {
return newInstance(factoryClassName, classLoader);
}
}
} catch( Exception ignored) {
} finally {
close(rd);
}
// try to read from $java.home/lib/jaxws.properties
FileInputStream inStream = null;
try {
String javah=System.getProperty( "java.home" );
String configFile = javah + File.separator +
"lib" + File.separator + "jaxws.properties";
File f=new File( configFile );
if( f.exists()) {
Properties props=new Properties();
inStream = new FileInputStream(f);
props.load(inStream);
String factoryClassName = props.getProperty(factoryId);
return newInstance(factoryClassName, classLoader);
}
} catch(Exception ignored) {
} finally {
close(inStream);
}
// Use the system property
try {
String systemProp =
System.getProperty( factoryId );
if( systemProp!=null) {
return newInstance(systemProp, classLoader);
}
} catch (SecurityException ignored) {
}
if (fallbackClassName == null) {
throw new WebServiceException(
"Provider for " + factoryId + " cannot be found", null);
}
return newInstance(fallbackClassName, classLoader);
}
private static void close(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (IOException ignored) {
}
}
}
/**
* Loads the class, provided that the calling thread has an access to the class being loaded.
*/
private static Class safeLoadClass(String className, ClassLoader classLoader) throws ClassNotFoundException {
try {
// make sure that the current thread has an access to the package of the given name.
SecurityManager s = System.getSecurityManager();
if (s != null) {
int i = className.lastIndexOf('.');
if (i != -1) {
s.checkPackageAccess(className.substring(0, i));
}
}
if (classLoader == null)
return Class.forName(className);
else
return classLoader.loadClass(className);
} catch (SecurityException se) {
// anyone can access the platform default factory class without permission
if (Provider.DEFAULT_JAXWSPROVIDER.equals(className))
return Class.forName(className);
throw se;
}
}
private static final String OSGI_SERVICE_LOADER_CLASS_NAME = "com.sun.org.glassfish.hk2.osgiresourcelocator.ServiceLoader";
private static boolean isOsgi() {
try {
Class.forName(OSGI_SERVICE_LOADER_CLASS_NAME);
return true;
} catch (ClassNotFoundException ignored) {
}
return false;
}
private static Object lookupUsingOSGiServiceLoader(String factoryId) {
try {
// Use reflection to avoid having any dependendcy on ServiceLoader class
Class serviceClass = Class.forName(factoryId);
Class[] args = new Class[]{serviceClass};
Class target = Class.forName(OSGI_SERVICE_LOADER_CLASS_NAME);
java.lang.reflect.Method m = target.getMethod("lookupProviderInstances", Class.class);
java.util.Iterator iter = ((Iterable) m.invoke(null, (Object[]) args)).iterator();
return iter.hasNext() ? iter.next() : null;
} catch (Exception ignored) {
// log and continue
return null;
}
}
}

View File

@@ -0,0 +1,91 @@
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.spi;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.WebServiceFeature;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
/**
* Invoker hides the detail of calling into application endpoint
* implementation. Container hands over an implementation of Invoker
* to JAX-WS runtime, and jax-ws runtime calls {@link #invoke}
* for a web service invocation. Finally, Invoker does the actual
* invocation of web service on endpoint instance.
*
* Container also injects the provided <code>WebServiceContext</code> and takes
* care of invoking <code>javax.annotation.PostConstruct</code> methods,
* if present, on the endpoint implementation.
*
* @see Provider#createEndpoint(String, Class, Invoker, WebServiceFeature...)
* @author Jitendra Kotamraju
* @since JAX-WS 2.2
*/
public abstract class Invoker {
/**
* JAX-WS runtimes calls this method to ask container to inject
* WebServiceContext on the endpoint instance. The
* <code>WebServiceContext</code> object uses thread-local information
* to return the correct information during the actual endpoint invocation
* regardless of how many threads are concurrently being used to serve
* requests.
*
* @param webServiceContext a holder for MessageContext
* @throws IllegalAccessException if the injection done
* by reflection API throws this exception
* @throws IllegalArgumentException if the injection done
* by reflection API throws this exception
* @throws InvocationTargetException if the injection done
* by reflection API throws this exception
*/
public abstract void inject(WebServiceContext webServiceContext)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException;
/**
* JAX-WS runtime calls this method to do the actual web service
* invocation on endpoint instance. The injected
* <code>WebServiceContext.getMessageContext()</code> gives the correct
* information for this invocation.
*
* @param m Method to be invoked on the service
* @param args Method arguments
* @return return value of the method
* @throws IllegalAccessException if the invocation done
* by reflection API throws this exception
* @throws IllegalArgumentException if the invocation done
* by reflection API throws this exception
* @throws InvocationTargetException if the invocation done
* by reflection API throws this exception
* @see Method#invoke
*/
public abstract Object invoke(Method m, Object... args)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException;
}

View File

@@ -0,0 +1,521 @@
/*
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.spi;
import java.net.URL;
import java.util.List;
import java.util.Iterator;
import java.util.Map;
import java.lang.reflect.Method;
import javax.xml.namespace.QName;
import javax.xml.ws.*;
import javax.xml.ws.wsaddressing.W3CEndpointReference;
import org.w3c.dom.Element;
/**
* Service provider for <code>ServiceDelegate</code> and
* <code>Endpoint</code> objects.
* <p>
*
* @since JAX-WS 2.0
*/
public abstract class Provider {
/**
* A constant representing the property used to lookup the
* name of a <code>Provider</code> implementation
* class.
*/
static public final String JAXWSPROVIDER_PROPERTY
= "javax.xml.ws.spi.Provider";
/**
* A constant representing the name of the default
* <code>Provider</code> implementation class.
**/
// Using two strings so that package renaming doesn't change it
static final String DEFAULT_JAXWSPROVIDER
= "com.sun"+".xml.internal.ws.spi.ProviderImpl";
/**
* Take advantage of Java SE 6's java.util.ServiceLoader API.
* Using reflection so that there is no compile-time dependency on SE 6.
*/
static private final Method loadMethod;
static private final Method iteratorMethod;
static {
Method tLoadMethod = null;
Method tIteratorMethod = null;
try {
Class<?> clazz = Class.forName("java.util.ServiceLoader");
tLoadMethod = clazz.getMethod("load", Class.class);
tIteratorMethod = clazz.getMethod("iterator");
} catch(ClassNotFoundException ce) {
// Running on Java SE 5
} catch(NoSuchMethodException ne) {
// Shouldn't happen
}
loadMethod = tLoadMethod;
iteratorMethod = tIteratorMethod;
}
/**
* Creates a new instance of Provider
*/
protected Provider() {
}
/**
*
* Creates a new provider object.
* <p>
* The algorithm used to locate the provider subclass to use consists
* of the following steps:
* <p>
* <ul>
* <li>
* If a resource with the name of
* <code>META-INF/services/javax.xml.ws.spi.Provider</code>
* exists, then its first line, if present, is used as the UTF-8 encoded
* name of the implementation class.
* </li>
* <li>
* If the $java.home/lib/jaxws.properties file exists and it is readable by
* the <code>java.util.Properties.load(InputStream)</code> method and it contains
* an entry whose key is <code>javax.xml.ws.spi.Provider</code>, then the value of
* that entry is used as the name of the implementation class.
* </li>
* <li>
* If a system property with the name <code>javax.xml.ws.spi.Provider</code>
* is defined, then its value is used as the name of the implementation class.
* </li>
* <li>
* Finally, a default implementation class name is used.
* </li>
* </ul>
*
*/
public static Provider provider() {
try {
Object provider = getProviderUsingServiceLoader();
if (provider == null) {
provider = FactoryFinder.find(JAXWSPROVIDER_PROPERTY, DEFAULT_JAXWSPROVIDER);
}
if (!(provider instanceof Provider)) {
Class pClass = Provider.class;
String classnameAsResource = pClass.getName().replace('.', '/') + ".class";
ClassLoader loader = pClass.getClassLoader();
if(loader == null) {
loader = ClassLoader.getSystemClassLoader();
}
URL targetTypeURL = loader.getResource(classnameAsResource);
throw new LinkageError("ClassCastException: attempting to cast" +
provider.getClass().getClassLoader().getResource(classnameAsResource) +
"to" + targetTypeURL.toString() );
}
return (Provider) provider;
} catch (WebServiceException ex) {
throw ex;
} catch (Exception ex) {
throw new WebServiceException("Unable to createEndpointReference Provider", ex);
}
}
private static Provider getProviderUsingServiceLoader() {
if (loadMethod != null) {
Object loader;
try {
loader = loadMethod.invoke(null, Provider.class);
} catch (Exception e) {
throw new WebServiceException("Cannot invoke java.util.ServiceLoader#load()", e);
}
Iterator<Provider> it;
try {
it = (Iterator<Provider>)iteratorMethod.invoke(loader);
} catch(Exception e) {
throw new WebServiceException("Cannot invoke java.util.ServiceLoader#iterator()", e);
}
return it.hasNext() ? it.next() : null;
}
return null;
}
/**
* Creates a service delegate object.
* <p>
* @param wsdlDocumentLocation A URL pointing to the WSDL document
* for the service, or <code>null</code> if there isn't one.
* @param serviceName The qualified name of the service.
* @param serviceClass The service class, which MUST be either
* <code>javax.xml.ws.Service</code> or a subclass thereof.
* @return The newly created service delegate.
*/
public abstract ServiceDelegate createServiceDelegate(
java.net.URL wsdlDocumentLocation,
QName serviceName, Class<? extends Service> serviceClass);
/**
* Creates a service delegate object.
* <p>
* @param wsdlDocumentLocation A URL pointing to the WSDL document
* for the service, or <code>null</code> if there isn't one.
* @param serviceName The qualified name of the service.
* @param serviceClass The service class, which MUST be either
* <code>javax.xml.ws.Service</code> or a subclass thereof.
* @param features Web Service features that must be configured on
* the service. If the provider doesn't understand a feature,
* it must throw a WebServiceException.
* @return The newly created service delegate.
*
* @since JAX-WS 2.2
*/
public ServiceDelegate createServiceDelegate(
java.net.URL wsdlDocumentLocation,
QName serviceName, Class<? extends Service> serviceClass, WebServiceFeature ... features) {
throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
}
/**
*
* Creates an endpoint object with the provided binding and implementation
* object.
*
* @param bindingId A URI specifying the desired binding (e.g. SOAP/HTTP)
* @param implementor A service implementation object to which
* incoming requests will be dispatched. The corresponding
* class MUST be annotated with all the necessary Web service
* annotations.
* @return The newly created endpoint.
*/
public abstract Endpoint createEndpoint(String bindingId,
Object implementor);
/**
* Creates and publishes an endpoint object with the specified
* address and implementation object.
*
* @param address A URI specifying the address and transport/protocol
* to use. A http: URI MUST result in the SOAP 1.1/HTTP
* binding being used. Implementations may support other
* URI schemes.
* @param implementor A service implementation object to which
* incoming requests will be dispatched. The corresponding
* class MUST be annotated with all the necessary Web service
* annotations.
* @return The newly created endpoint.
*/
public abstract Endpoint createAndPublishEndpoint(String address,
Object implementor);
/**
* read an EndpointReference from the infoset contained in
* <code>eprInfoset</code>.
*
* @param eprInfoset infoset for EndpointReference
*
* @return the <code>EndpointReference</code> unmarshalled from
* <code>eprInfoset</code>. This method never returns <code>null</code>.
*
* @throws WebServiceException If there is an error creating the
* <code>EndpointReference</code> from the specified <code>eprInfoset</code>.
*
* @throws NullPointerException If the <code>null</code>
* <code>eprInfoset</code> value is given.
*
* @since JAX-WS 2.1
**/
public abstract EndpointReference readEndpointReference(javax.xml.transform.Source eprInfoset);
/**
* The getPort method returns a proxy. If there
* are any reference parameters in the
* <code>endpointReference</code>, then those reference
* parameters MUST appear as SOAP headers, indicating them to be
* reference parameters, on all messages sent to the endpoint.
* The parameter <code>serviceEndpointInterface</code> specifies
* the service endpoint interface that is supported by the
* returned proxy.
* The parameter <code>endpointReference</code> specifies the
* endpoint that will be invoked by the returned proxy.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the proxy accordingly from
* the WSDL metadata of the
* <code>serviceEndpointInterface</code> and the <code>EndpointReference</code>.
* For this method
* to successfully return a proxy, WSDL metadata MUST be available and the
* <code>endpointReference</code> MUST contain an implementation understood
* <code>serviceName</code> metadata.
*
*
* @param endpointReference the EndpointReference that will
* be invoked by the returned proxy.
* @param serviceEndpointInterface Service endpoint interface
* @param features A list of WebServiceFeatures to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return Object Proxy instance that supports the
* specified service endpoint interface
* @throws WebServiceException
* <UL>
* <LI>If there is an error during creation
* of the proxy
* <LI>If there is any missing WSDL metadata
* as required by this method}
* <LI>If this
* <code>endpointReference</code>
* is illegal
* <LI>If an illegal
* <code>serviceEndpointInterface</code>
* is specified
* <LI>If a feature is enabled that is not compatible with
* this port or is unsupported.
* </UL>
*
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public abstract <T> T getPort(EndpointReference endpointReference,
Class<T> serviceEndpointInterface,
WebServiceFeature... features);
/**
* Factory method to create a <code>W3CEndpointReference</code>.
*
* <p>
* This method can be used to create a <code>W3CEndpointReference</code>
* for any endpoint by specifying the <code>address</code> property along
* with any other desired properties. This method
* can also be used to create a <code>W3CEndpointReference</code> for
* an endpoint that is published by the same Java EE application.
* To do so the <code>address</code> property can be provided or this
* method can automatically determine the <code>address</code> of
* an endpoint that is published by the same Java EE application and is
* identified by the <code>serviceName</code> and
* <code>portName</code> propeties. If the <code>address</code> is
* <code>null</code> and the <code>serviceName</code> and
* <code>portName</code> do not identify an endpoint published by the
* same Java EE application, a
* <code>javax.lang.IllegalStateException</code> MUST be thrown.
*
* @param address Specifies the address of the target endpoint
* @param serviceName Qualified name of the service in the WSDL.
* @param portName Qualified name of the endpoint in the WSDL.
* @param metadata A list of elements that should be added to the
* <code>W3CEndpointReference</code> instances <code>wsa:metadata</code>
* element.
* @param wsdlDocumentLocation URL for the WSDL document location for
* the service.
* @param referenceParameters Reference parameters to be associated
* with the returned <code>EndpointReference</code> instance.
*
* @return the <code>W3CEndpointReference</code> created from
* <code>serviceName</code>, <code>portName</code>,
* <code>metadata</code>, <code>wsdlDocumentLocation</code>
* and <code>referenceParameters</code>. This method
* never returns <code>null</code>.
*
* @throws java.lang.IllegalStateException
* <ul>
* <li>If the <code>address</code>, <code>serviceName</code> and
* <code>portName</code> are all <code>null</code>.
* <li>If the <code>serviceName</code> service is <code>null</code> and the
* <code>portName</code> is NOT <code>null</code>.
* <li>If the <code>address</code> property is <code>null</code> and
* the <code>serviceName</code> and <code>portName</code> do not
* specify a valid endpoint published by the same Java EE
* application.
* <li>If the <code>serviceName</code>is NOT <code>null</code>
* and is not present in the specified WSDL.
* <li>If the <code>portName</code> port is not <code>null</code> and it
* is not present in <code>serviceName</code> service in the WSDL.
* <li>If the <code>wsdlDocumentLocation</code> is NOT <code>null</code>
* and does not represent a valid WSDL.
* </ul>
* @throws WebServiceException If an error occurs while creating the
* <code>W3CEndpointReference</code>.
*
* @since JAX-WS 2.1
*/
public abstract W3CEndpointReference createW3CEndpointReference(String address, QName serviceName, QName portName,
List<Element> metadata, String wsdlDocumentLocation, List<Element> referenceParameters);
/**
* Factory method to create a <code>W3CEndpointReference</code>.
* Using this method, a <code>W3CEndpointReference</code> instance
* can be created with extension elements, and attributes.
* <code>Provider</code> implementations must override the default
* implementation.
*
* <p>
* This method can be used to create a <code>W3CEndpointReference</code>
* for any endpoint by specifying the <code>address</code> property along
* with any other desired properties. This method
* can also be used to create a <code>W3CEndpointReference</code> for
* an endpoint that is published by the same Java EE application.
* To do so the <code>address</code> property can be provided or this
* method can automatically determine the <code>address</code> of
* an endpoint that is published by the same Java EE application and is
* identified by the <code>serviceName</code> and
* <code>portName</code> propeties. If the <code>address</code> is
* <code>null</code> and the <code>serviceName</code> and
* <code>portName</code> do not identify an endpoint published by the
* same Java EE application, a
* <code>javax.lang.IllegalStateException</code> MUST be thrown.
*
* @param address Specifies the address of the target endpoint
* @param interfaceName the <code>wsam:InterfaceName</code> element in the
* <code>wsa:Metadata</code> element.
* @param serviceName Qualified name of the service in the WSDL.
* @param portName Qualified name of the endpoint in the WSDL.
* @param metadata A list of elements that should be added to the
* <code>W3CEndpointReference</code> instances <code>wsa:metadata</code>
* element.
* @param wsdlDocumentLocation URL for the WSDL document location for
* the service.
* @param referenceParameters Reference parameters to be associated
* with the returned <code>EndpointReference</code> instance.
* @param elements extension elements to be associated
* with the returned <code>EndpointReference</code> instance.
* @param attributes extension attributes to be associated
* with the returned <code>EndpointReference</code> instance.
*
* @return the <code>W3CEndpointReference</code> created from
* <code>serviceName</code>, <code>portName</code>,
* <code>metadata</code>, <code>wsdlDocumentLocation</code>
* and <code>referenceParameters</code>. This method
* never returns <code>null</code>.
*
* @throws java.lang.IllegalStateException
* <ul>
* <li>If the <code>address</code>, <code>serviceName</code> and
* <code>portName</code> are all <code>null</code>.
* <li>If the <code>serviceName</code> service is <code>null</code> and the
* <code>portName</code> is NOT <code>null</code>.
* <li>If the <code>address</code> property is <code>null</code> and
* the <code>serviceName</code> and <code>portName</code> do not
* specify a valid endpoint published by the same Java EE
* application.
* <li>If the <code>serviceName</code>is NOT <code>null</code>
* and is not present in the specified WSDL.
* <li>If the <code>portName</code> port is not <code>null</code> and it
* is not present in <code>serviceName</code> service in the WSDL.
* <li>If the <code>wsdlDocumentLocation</code> is NOT <code>null</code>
* and does not represent a valid WSDL.
* <li>If the <code>wsdlDocumentLocation</code> is NOT <code>null</code> but
* wsdli:wsdlLocation's namespace name cannot be got from the available
* metadata.
* </ul>
* @throws WebServiceException If an error occurs while creating the
* <code>W3CEndpointReference</code>.
* @since JAX-WS 2.2
*/
public W3CEndpointReference createW3CEndpointReference(String address,
QName interfaceName, QName serviceName, QName portName,
List<Element> metadata, String wsdlDocumentLocation, List<Element> referenceParameters,
List<Element> elements, Map<QName, String> attributes) {
throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
}
/**
* Creates and publishes an endpoint object with the specified
* address, implementation object and web service features.
* <code>Provider</code> implementations must override the
* default implementation.
*
* @param address A URI specifying the address and transport/protocol
* to use. A http: URI MUST result in the SOAP 1.1/HTTP
* binding being used. Implementations may support other
* URI schemes.
* @param implementor A service implementation object to which
* incoming requests will be dispatched. The corresponding
* class MUST be annotated with all the necessary Web service
* annotations.
* @param features A list of WebServiceFeatures to configure on the
* endpoint. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return The newly created endpoint.
* @since JAX-WS 2.2
*/
public Endpoint createAndPublishEndpoint(String address,
Object implementor, WebServiceFeature ... features) {
throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
}
/**
* Creates an endpoint object with the provided binding, implementation
* object and web service features. <code>Provider</code> implementations
* must override the default implementation.
*
* @param bindingId A URI specifying the desired binding (e.g. SOAP/HTTP)
* @param implementor A service implementation object to which
* incoming requests will be dispatched. The corresponding
* class MUST be annotated with all the necessary Web service
* annotations.
* @param features A list of WebServiceFeatures to configure on the
* endpoint. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return The newly created endpoint.
* @since JAX-WS 2.2
*/
public Endpoint createEndpoint(String bindingId, Object implementor,
WebServiceFeature ... features) {
throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
}
/**
* Creates an endpoint object with the provided binding, implementation
* class, invoker and web service features. Containers typically use
* this to create Endpoint objects. <code>Provider</code>
* implementations must override the default implementation.
*
* @param bindingId A URI specifying the desired binding (e.g. SOAP/HTTP).
* Can be null.
* @param implementorClass A service implementation class that
* MUST be annotated with all the necessary Web service
* annotations.
* @param invoker that does the actual invocation on the service instance.
* @param features A list of WebServiceFeatures to configure on the
* endpoint. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return The newly created endpoint.
* @since JAX-WS 2.2
*/
public Endpoint createEndpoint(String bindingId, Class<?> implementorClass,
Invoker invoker, WebServiceFeature ... features) {
throw new UnsupportedOperationException("JAX-WS 2.2 implementation must override this default behaviour.");
}
}

View File

@@ -0,0 +1,622 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.spi;
import java.util.Iterator;
import javax.xml.namespace.QName;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.handler.HandlerResolver;
import javax.xml.ws.WebServiceFeature;
import javax.xml.bind.JAXBContext;
import javax.xml.ws.EndpointReference;
import javax.xml.ws.WebServiceException;
/**
* Service delegates are used internally by <code>Service</code> objects
* to allow pluggability of JAX-WS implementations.
* <p>
* Every <code>Service</code> object has its own delegate, created using
* the {@link javax.xml.ws.spi.Provider#createServiceDelegate} method. A <code>Service</code>
* object delegates all of its instance methods to its delegate.
*
* @see javax.xml.ws.Service
* @see javax.xml.ws.spi.Provider
*
* @since JAX-WS 2.0
*/
public abstract class ServiceDelegate {
protected ServiceDelegate() {
}
/**
* The <code>getPort</code> method returns a proxy. A service client
* uses this proxy to invoke operations on the target
* service endpoint. The <code>serviceEndpointInterface</code>
* specifies the service endpoint interface that is supported by
* the created dynamic proxy instance.
*
* @param portName Qualified name of the service endpoint in
* the WSDL service description
* @param serviceEndpointInterface Service endpoint interface
* supported by the dynamic proxy
* @return Object Proxy instance that
* supports the specified service endpoint
* interface
* @throws WebServiceException This exception is thrown in the
* following cases:
* <UL>
* <LI>If there is an error in creation of
* the proxy
* <LI>If there is any missing WSDL metadata
* as required by this method
* <LI>If an illegal
* <code>serviceEndpointInterface</code>
* or <code>portName</code> is specified
* </UL>
* @see java.lang.reflect.Proxy
* @see java.lang.reflect.InvocationHandler
**/
public abstract <T> T getPort(QName portName,
Class<T> serviceEndpointInterface);
/**
* The <code>getPort</code> method returns a proxy. A service client
* uses this proxy to invoke operations on the target
* service endpoint. The <code>serviceEndpointInterface</code>
* specifies the service endpoint interface that is supported by
* the created dynamic proxy instance.
*
* @param portName Qualified name of the service endpoint in
* the WSDL service description
* @param serviceEndpointInterface Service endpoint interface
* supported by the dynamic proxy or instance
* @param features A list of WebServiceFeatures to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return Object Proxy instance that
* supports the specified service endpoint
* interface
* @throws WebServiceException This exception is thrown in the
* following cases:
* <UL>
* <LI>If there is an error in creation of
* the proxy
* <LI>If there is any missing WSDL metadata
* as required by this method
* <LI>If an illegal
* <code>serviceEndpointInterface</code>
* or <code>portName</code> is specified
* <LI>If a feature is enabled that is not compatible
* with this port or is unsupported.
* </UL>
* @see java.lang.reflect.Proxy
* @see java.lang.reflect.InvocationHandler
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public abstract <T> T getPort(QName portName,
Class<T> serviceEndpointInterface, WebServiceFeature... features);
/**
* The <code>getPort</code> method returns a proxy.
* The parameter <code>endpointReference</code> specifies the
* endpoint that will be invoked by the returned proxy. If there
* are any reference parameters in the
* <code>endpointReference</code>, then those reference
* parameters MUST appear as SOAP headers, indicating them to be
* reference parameters, on all messages sent to the endpoint.
* The <code>endpointReference's</code> address MUST be used
* for invocations on the endpoint.
* The parameter <code>serviceEndpointInterface</code> specifies
* the service endpoint interface that is supported by the
* returned proxy.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the proxy accordingly from
* the WSDL associated with this <code>Service</code> instance or
* from the metadata from the <code>endpointReference</code>.
* If this <code>Service</code> instance has a WSDL and
* the <code>endpointReference</code> metadata
* also has a WSDL, then the WSDL from this instance MUST be used.
* If this <code>Service</code> instance does not have a WSDL and
* the <code>endpointReference</code> does have a WSDL, then the
* WSDL from the <code>endpointReference</code> MAY be used.
* The returned proxy should not be reconfigured by the client.
* If this <code>Service</code> instance has a known proxy
* port that matches the information contained in
* the WSDL,
* then that proxy is returned, otherwise a WebServiceException
* is thrown.
* <p>
* Calling this method has the same behavior as the following
* <pre>
* <code>port = service.getPort(portName, serviceEndpointInterface);</code>
* </pre>
* where the <code>portName</code> is retrieved from the
* metadata of the <code>endpointReference</code> or from the
* <code>serviceEndpointInterface</code> and the WSDL
* associated with this <code>Service</code> instance.
*
* @param endpointReference The <code>EndpointReference</code>
* for the target service endpoint that will be invoked by the
* returned proxy.
* @param serviceEndpointInterface Service endpoint interface.
* @param features A list of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return Object Proxy instance that supports the
* specified service endpoint interface.
* @throws WebServiceException
* <UL>
* <LI>If there is an error during creation
* of the proxy.
* <LI>If there is any missing WSDL metadata
* as required by this method.
* <LI>If the <code>endpointReference</code> metadata does
* not match the <code>serviceName</code> of this
* <code>Service</code> instance.
* <LI>If a <code>portName</code> cannot be extracted
* from the WSDL or <code>endpointReference</code> metadata.
* <LI>If an invalid
* <code>endpointReference</code>
* is specified.
* <LI>If an invalid
* <code>serviceEndpointInterface</code>
* is specified.
* <LI>If a feature is enabled that is not compatible
* with this port or is unsupported.
* </UL>
*
* @since JAX-WS 2.1
**/
public abstract <T> T getPort(EndpointReference endpointReference,
Class<T> serviceEndpointInterface, WebServiceFeature... features);
/**
* The <code>getPort</code> method returns a proxy. The parameter
* <code>serviceEndpointInterface</code> specifies the service
* endpoint interface that is supported by the returned proxy.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the proxy accordingly.
* The returned proxy should not be reconfigured by the client.
*
* @param serviceEndpointInterface Service endpoint interface
* @return Object instance that supports the
* specified service endpoint interface
* @throws WebServiceException
* <UL>
* <LI>If there is an error during creation
* of the proxy
* <LI>If there is any missing WSDL metadata
* as required by this method
* <LI>If an illegal
* <code>serviceEndpointInterface</code>
* is specified
* </UL>
**/
public abstract <T> T getPort(Class<T> serviceEndpointInterface);
/**
* The <code>getPort</code> method returns a proxy. The parameter
* <code>serviceEndpointInterface</code> specifies the service
* endpoint interface that is supported by the returned proxy.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the proxy accordingly.
* The returned proxy should not be reconfigured by the client.
*
* @param serviceEndpointInterface Service endpoint interface
* @param features An array of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
* @return Object instance that supports the
* specified service endpoint interface
* @throws WebServiceException
* <UL>
* <LI>If there is an error during creation
* of the proxy
* <LI>If there is any missing WSDL metadata
* as required by this method
* <LI>If an illegal
* <code>serviceEndpointInterface</code>
* is specified
* <LI>If a feature is enabled that is not compatible
* with this port or is unsupported.
* </UL>
*
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public abstract <T> T getPort(Class<T> serviceEndpointInterface,
WebServiceFeature... features);
/**
* Creates a new port for the service. Ports created in this way contain
* no WSDL port type information and can only be used for creating
* <code>Dispatch</code>instances.
*
* @param portName Qualified name for the target service endpoint
* @param bindingId A URI identifier of a binding.
* @param endpointAddress Address of the target service endpoint as a URI
* @throws WebServiceException If any error in the creation of
* the port
*
* @see javax.xml.ws.soap.SOAPBinding#SOAP11HTTP_BINDING
* @see javax.xml.ws.soap.SOAPBinding#SOAP12HTTP_BINDING
* @see javax.xml.ws.http.HTTPBinding#HTTP_BINDING
**/
public abstract void addPort(QName portName, String bindingId,
String endpointAddress);
/**
* Creates a <code>Dispatch</code> instance for use with objects of
* the user's choosing.
*
* @param portName Qualified name for the target service endpoint
* @param type The class of object used for messages or message
* payloads. Implementations are required to support
* <code>javax.xml.transform.Source</code> and <code>javax.xml.soap.SOAPMessage</code>.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the user will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the user will work with
* SOAP messages or the contents of a SOAP body. Mode MUST be <code>MESSAGE</code>
* when type is <code>SOAPMessage</code>.
*
* @return Dispatch instance
* @throws WebServiceException If any error in the creation of
* the <code>Dispatch</code> object
* @see javax.xml.transform.Source
* @see javax.xml.soap.SOAPMessage
**/
public abstract <T> Dispatch<T> createDispatch(QName portName, Class<T> type,
Service.Mode mode);
/**
* Creates a <code>Dispatch</code> instance for use with objects of
* the user's choosing.
*
* @param portName Qualified name for the target service endpoint
* @param type The class of object used for messages or message
* payloads. Implementations are required to support
* <code>javax.xml.transform.Source</code> and <code>javax.xml.soap.SOAPMessage</code>.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the user will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the user will work with
* SOAP messages or the contents of a SOAP body. Mode MUST be <code>MESSAGE</code>
* when type is <code>SOAPMessage</code>.
* @param features A list of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
*
* @return Dispatch instance
* @throws WebServiceException If any error in the creation of
* the <code>Dispatch</code> object or if a
* feature is enabled that is not compatible with
* this port or is unsupported.
*
* @see javax.xml.transform.Source
* @see javax.xml.soap.SOAPMessage
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public abstract <T> Dispatch<T> createDispatch(QName portName, Class<T> type,
Service.Mode mode, WebServiceFeature... features);
/**
* Creates a <code>Dispatch</code> instance for use with objects of
* the user's choosing. If there
* are any reference parameters in the
* <code>endpointReference</code>, then those reference
* parameters MUST appear as SOAP headers, indicating them to be
* reference parameters, on all messages sent to the endpoint.
* The <code>endpointReference's</code> address MUST be used
* for invocations on the endpoint.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the dispatch accordingly from
* the WSDL associated with this <code>Service</code> instance or
* from the metadata from the <code>endpointReference</code>.
* If this <code>Service</code> instance has a WSDL and
* the <code>endpointReference</code>
* also has a WSDL in its metadata, then the WSDL from this instance MUST be used.
* If this <code>Service</code> instance does not have a WSDL and
* the <code>endpointReference</code> does have a WSDL, then the
* WSDL from the <code>endpointReference</code> MAY be used.
* An implementation MUST be able to retrieve the <code>portName</code> from the
* <code>endpointReference</code> metadata.
* <p>
* This method behaves the same as calling
* <pre>
* <code>dispatch = service.createDispatch(portName, type, mode, features);</code>
* </pre>
* where the <code>portName</code> is retrieved from the
* WSDL or <code>EndpointReference</code> metadata.
*
* @param endpointReference The <code>EndpointReference</code>
* for the target service endpoint that will be invoked by the
* returned <code>Dispatch</code> object.
* @param type The class of object used to messages or message
* payloads. Implementations are required to support
* <code>javax.xml.transform.Source</code> and <code>javax.xml.soap.SOAPMessage</code>.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the user will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the user will work with
* SOAP messages or the contents of a SOAP body. Mode MUST be <code>MESSAGE</code>
* when type is <code>SOAPMessage</code>.
* @param features An array of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
*
* @return Dispatch instance
* @throws WebServiceException
* <UL>
* <LI>If there is any missing WSDL metadata
* as required by this method.
* <li>If the <code>endpointReference</code> metadata does
* not match the <code>serviceName</code> or <code>portName</code>
* of a WSDL associated
* with this <code>Service</code> instance.
* <li>If the <code>portName</code> cannot be determined
* from the <code>EndpointReference</code> metadata.
* <li>If any error in the creation of
* the <code>Dispatch</code> object.
* <li>If a feature is enabled that is not
* compatible with this port or is unsupported.
* </UL>
*
* @see javax.xml.transform.Source
* @see javax.xml.soap.SOAPMessage
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public abstract <T> Dispatch<T> createDispatch(EndpointReference endpointReference,
Class<T> type, Service.Mode mode,
WebServiceFeature... features);
/**
* Creates a <code>Dispatch</code> instance for use with JAXB
* generated objects.
*
* @param portName Qualified name for the target service endpoint
* @param context The JAXB context used to marshall and unmarshall
* messages or message payloads.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the user will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the user will work with
* SOAP messages or the contents of a SOAP body.
*
* @return Dispatch instance
* @throws WebServiceException If any error in the creation of
* the <code>Dispatch</code> object
*
* @see javax.xml.bind.JAXBContext
**/
public abstract Dispatch<Object> createDispatch(QName portName,
JAXBContext context, Service.Mode mode);
/**
* Creates a <code>Dispatch</code> instance for use with JAXB
* generated objects.
*
* @param portName Qualified name for the target service endpoint
* @param context The JAXB context used to marshall and unmarshall
* messages or message payloads.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the user will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the user will work with
* SOAP messages or the contents of a SOAP body.
* @param features A list of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
*
* @return Dispatch instance
* @throws WebServiceException If any error in the creation of
* the <code>Dispatch</code> object or if a
* feature is enabled that is not compatible with
* this port or is unsupported.
*
* @see javax.xml.bind.JAXBContext
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public abstract Dispatch<Object> createDispatch(QName portName,
JAXBContext context, Service.Mode mode, WebServiceFeature... features);
/**
* Creates a <code>Dispatch</code> instance for use with JAXB
* generated objects. If there
* are any reference parameters in the
* <code>endpointReference</code>, then those reference
* parameters MUST appear as SOAP headers, indicating them to be
* reference parameters, on all messages sent to the endpoint.
* The <code>endpointReference's</code> address MUST be used
* for invocations on the endpoint.
* In the implementation of this method, the JAX-WS
* runtime system takes the responsibility of selecting a protocol
* binding (and a port) and configuring the dispatch accordingly from
* the WSDL associated with this <code>Service</code> instance or
* from the metadata from the <code>endpointReference</code>.
* If this <code>Service</code> instance has a WSDL and
* the <code>endpointReference</code>
* also has a WSDL in its metadata, then the WSDL from this instance
* MUST be used.
* If this <code>Service</code> instance does not have a WSDL and
* the <code>endpointReference</code> does have a WSDL, then the
* WSDL from the <code>endpointReference</code> MAY be used.
* An implementation MUST be able to retrieve the <code>portName</code> from the
* <code>endpointReference</code> metadata.
* <p>
* This method behavies the same as calling
* <pre>
* <code>dispatch = service.createDispatch(portName, context, mode, features);</code>
* </pre>
* where the <code>portName</code> is retrieved from the
* WSDL or <code>endpointReference</code> metadata.
*
* @param endpointReference The <code>EndpointReference</code>
* for the target service endpoint that will be invoked by the
* returned <code>Dispatch</code> object.
* @param context The JAXB context used to marshall and unmarshall
* messages or message payloads.
* @param mode Controls whether the created dispatch instance is message
* or payload oriented, i.e. whether the user will work with complete
* protocol messages or message payloads. E.g. when using the SOAP
* protocol, this parameter controls whether the user will work with
* SOAP messages or the contents of a SOAP body.
* @param features An array of <code>WebServiceFeatures</code> to configure on the
* proxy. Supported features not in the <code>features
* </code> parameter will have their default values.
*
* @return Dispatch instance
* @throws WebServiceException
* <UL>
* <li>If there is any missing WSDL metadata
* as required by this method.
* <li>If the <code>endpointReference</code> metadata does
* not match the <code>serviceName</code> or <code>portName</code>
* of a WSDL associated
* with this <code>Service</code> instance.
* <li>If the <code>portName</code> cannot be determined
* from the <code>EndpointReference</code> metadata.
* <li>If any error in the creation of
* the <code>Dispatch</code> object.
* <li>if a feature is enabled that is not
* compatible with this port or is unsupported.
* </UL>
*
* @see javax.xml.bind.JAXBContext
* @see WebServiceFeature
*
* @since JAX-WS 2.1
**/
public abstract Dispatch<Object> createDispatch(EndpointReference endpointReference,
JAXBContext context, Service.Mode mode,
WebServiceFeature... features);
/**
* Gets the name of this service.
* @return Qualified name of this service
**/
public abstract QName getServiceName();
/**
* Returns an <code>Iterator</code> for the list of
* <code>QName</code>s of service endpoints grouped by this
* service
*
* @return Returns <code>java.util.Iterator</code> with elements
* of type <code>javax.xml.namespace.QName</code>
* @throws WebServiceException If this Service class does not
* have access to the required WSDL metadata
**/
public abstract Iterator<javax.xml.namespace.QName> getPorts();
/**
* Gets the location of the WSDL document for this Service.
*
* @return URL for the location of the WSDL document for
* this service
**/
public abstract java.net.URL getWSDLDocumentLocation();
/**
* Returns the configured handler resolver.
*
* @return HandlerResolver The <code>HandlerResolver</code> being
* used by this <code>Service</code> instance, or <code>null</code>
* if there isn't one.
**/
public abstract HandlerResolver getHandlerResolver();
/**
* Sets the <code>HandlerResolver</code> for this <code>Service</code>
* instance.
* <p>
* The handler resolver, if present, will be called once for each
* proxy or dispatch instance that is created, and the handler chain
* returned by the resolver will be set on the instance.
*
* @param handlerResolver The <code>HandlerResolver</code> to use
* for all subsequently created proxy/dispatch objects.
*
* @see javax.xml.ws.handler.HandlerResolver
**/
public abstract void setHandlerResolver(HandlerResolver handlerResolver);
/**
* Returns the executor for this <code>Service</code>instance.
*
* The executor is used for all asynchronous invocations that
* require callbacks.
*
* @return The <code>java.util.concurrent.Executor</code> to be
* used to invoke a callback.
*
* @see java.util.concurrent.Executor
**/
public abstract java.util.concurrent.Executor getExecutor();
/**
* Sets the executor for this <code>Service</code> instance.
*
* The executor is used for all asynchronous invocations that
* require callbacks.
*
* @param executor The <code>java.util.concurrent.Executor</code>
* to be used to invoke a callback.
*
* @throws SecurityException If the instance does not support
* setting an executor for security reasons (e.g. the
* necessary permissions are missing).
*
* @see java.util.concurrent.Executor
**/
public abstract void setExecutor(java.util.concurrent.Executor executor);
}

View File

@@ -0,0 +1,86 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.spi;
import java.lang.annotation.Documented;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.WebServiceRef;
import javax.xml.ws.WebServiceRefs;
import javax.xml.ws.RespectBinding;
import javax.xml.ws.soap.Addressing;
import javax.xml.ws.soap.MTOM;
/**
* Annotation used to identify other annotations
* as a <code>WebServiceFeature</code>.
* <p>
* Each <code>WebServiceFeature</code> annotation annotated with
* this annotation MUST contain an
* <code>enabled</code> property of type
* <code>boolean</code> with a default value of <code>true</code>.
* <p>
* JAX-WS defines the following
* <code>WebServiceFeature</code> annotations (<code>Addressing</code>,
* <code>MTOM</code>, <code>RespectBinding</code>), however, an implementation
* may define vendors specific annotations for other features.
* <p>
* Annotations annotated with <code>WebServiceFeatureAnnotation</code> MUST
* have the same @Target of {@link WebServiceRef} annotation, so that the resulting
* feature annotation can be used in conjunction with the {@link WebServiceRef}
* annotation if necessary.
* <p>
* If a JAX-WS implementation encounters an annotation annotated
* with the <code>WebServiceFeatureAnnotation</code> that it does not
* recognize/support an error MUST be given.
* <p>
*
* @see Addressing
* @see MTOM
* @see RespectBinding
*
* @since JAX-WS 2.1
*/
@Target(ElementType.ANNOTATION_TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServiceFeatureAnnotation {
/**
* Unique identifier for the WebServiceFeature. This
* identifier MUST be unique across all implementations
* of JAX-WS.
*/
String id();
/**
* The <code>WebServiceFeature</code> bean that is associated
* with the <code>WebServiceFeature</code> annotation
*/
Class<? extends WebServiceFeature> bean();
}

View File

@@ -0,0 +1,99 @@
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.spi.http;
import javax.xml.ws.Endpoint;
import java.util.Set;
/**
* HttpContext represents a mapping between the root URI path of a web
* service to a {@link HttpHandler} which is invoked to handle requests
* destined for that path on the associated container.
* <p>
* Container provides the implementation for this and it matches
* web service requests to corresponding HttpContext objects.
*
* @author Jitendra Kotamraju
* @since JAX-WS 2.2
*/
public abstract class HttpContext {
protected HttpHandler handler;
/**
* JAX-WS runtime sets its handler during
* {@link Endpoint#publish(HttpContext)} to handle
* HTTP requests for this context. Container or its extensions
* use this handler to process the requests.
*
* @param handler the handler to set for this context
*/
public void setHandler(HttpHandler handler) {
this.handler = handler;
}
/**
* Returns the path for this context. This path uniquely identifies
* an endpoint inside an application and the path is relative to
* application's context path. Container should give this
* path based on how it matches request URIs to this HttpContext object.
*
* <p>
* For servlet container, this is typically a url-pattern for an endpoint.
*
* <p>
* Endpoint's address for this context can be computed as follows:
* <pre>
* HttpExchange exch = ...;
* String endpointAddress =
* exch.getScheme() + "://"
* + exch.getLocalAddress().getHostName()
* + ":" + exch.getLocalAddress().getPort()
* + exch.getContextPath() + getPath();
* </pre>
*
* @return this context's path
*/
public abstract String getPath();
/**
* Returns an attribute value for container's configuration
* and other data that can be used by jax-ws runtime.
*
* @param name attribute name
* @return attribute value
*/
public abstract Object getAttribute(String name);
/**
* Returns all attribute names for container's configuration
* and other data that can be used by jax-ws runtime.
*
* @return set of all attribute names
*/
public abstract Set<String> getAttributeNames();
}

View File

@@ -0,0 +1,328 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.spi.http;
import javax.xml.ws.handler.MessageContext;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.security.Principal;
/**
* This class encapsulates a HTTP request received and a
* response to be generated in one exchange. It provides methods
* for examining the request from the client, and for building and
* sending the response.
* <p>
* A <code>HttpExchange</code> must be closed to free or reuse
* underlying resources. The effect of failing to close an exchange
* is undefined.
*
* @author Jitendra Kotamraju
* @since JAX-WS 2.2
*/
public abstract class HttpExchange {
/**
* Standard property: cipher suite value when the request is received
* over HTTPS
* <p>Type: String
*/
public static final String REQUEST_CIPHER_SUITE =
"javax.xml.ws.spi.http.request.cipher.suite";
/**
* Standard property: bit size of the algorithm when the request is
* received over HTTPS
* <p>Type: Integer
*/
public static final String REQUEST_KEY_SIZE =
"javax.xml.ws.spi.http.request.key.size";
/**
* Standard property: A SSL certificate, if any, associated with the request
*
* <p>Type: java.security.cert.X509Certificate[]
* The order of this array is defined as being in ascending order of trust.
* The first certificate in the chain is the one set by the client, the next
* is the one used to authenticate the first, and so on.
*/
public static final String REQUEST_X509CERTIFICATE =
"javax.xml.ws.spi.http.request.cert.X509Certificate";
/**
* Returns an immutable Map containing the HTTP headers that were
* included with this request. The keys in this Map will be the header
* names, while the values will be a List of Strings containing each value
* that was included (either for a header that was listed several times,
* or one that accepts a comma-delimited list of values on a single line).
* In either of these cases, the values for the header name will be
* presented in the order that they were included in the request.
* <p>
* The keys in Map are case-insensitive.
*
* @return an immutable Map which can be used to access request headers
*/
public abstract Map<String, List<String>> getRequestHeaders();
/**
* Returns the value of the specified request header. If the request
* did not include a header of the specified name, this method returns
* null. If there are multiple headers with the same name, this method
* returns the first header in the request. The header name is
* case-insensitive. This is a convienence method to get a header
* (instead of using the {@link #getRequestHeaders}).
*
* @param name the name of the request header
* @return returns the value of the requested header,
* or null if the request does not have a header of that name
*/
public abstract String getRequestHeader(String name);
/**
* Returns a mutable Map into which the HTTP response headers can be stored
* and which will be transmitted as part of this response. The keys in the
* Map will be the header names, while the values must be a List of Strings
* containing each value that should be included multiple times
* (in the order that they should be included).
* <p>
* The keys in Map are case-insensitive.
*
* @return a mutable Map which can be used to set response headers.
*/
public abstract Map<String, List<String>> getResponseHeaders();
/**
* Adds a response header with the given name and value. This method
* allows a response header to have multiple values. This is a
* convenience method to add a response header(instead of using the
* {@link #getResponseHeaders()}).
*
* @param name the name of the header
* @param value the additional header value. If it contains octet string,
* it should be encoded according to
* RFC 2047 (http://www.ietf.org/rfc/rfc2047.txt)
*
* @see #getResponseHeaders
*/
public abstract void addResponseHeader(String name, String value);
/**
* Returns the part of the request's URI from the protocol
* name up to the query string in the first line of the HTTP request.
* Container doesn't decode this string.
*
* @return the request URI
*/
public abstract String getRequestURI();
/**
* Returns the context path of all the endpoints in an application.
* This path is the portion of the request URI that indicates the
* context of the request. The context path always comes first in a
* request URI. The path starts with a "/" character but does not
* end with a "/" character. If this method returns "", the request
* is for default context. The container does not decode this string.
*
* <p>
* Context path is used in computing the endpoint address. See
* {@link HttpContext#getPath}
*
* @return context path of all the endpoints in an application
* @see HttpContext#getPath
*/
public abstract String getContextPath();
/**
* Get the HTTP request method
*
* @return the request method
*/
public abstract String getRequestMethod();
/**
* Returns a {@link HttpContext} for this exchange.
* Container matches the request with the associated Endpoint's HttpContext
*
* @return the HttpContext for this exchange
*/
public abstract HttpContext getHttpContext();
/**
* This must be called to end an exchange. Container takes care of
* closing request and response streams. This must be called so that
* the container can free or reuse underlying resources.
*
* @throws IOException if any i/o error
*/
public abstract void close() throws IOException;
/**
* Returns a stream from which the request body can be read.
* Multiple calls to this method will return the same stream.
*
* @return the stream from which the request body can be read.
* @throws IOException if any i/o error during request processing
*/
public abstract InputStream getRequestBody() throws IOException;
/**
* Returns a stream to which the response body must be
* written. {@link #setStatus}) must be called prior to calling
* this method. Multiple calls to this method (for the same exchange)
* will return the same stream.
*
* @return the stream to which the response body is written
* @throws IOException if any i/o error during response processing
*/
public abstract OutputStream getResponseBody() throws IOException;
/**
* Sets the HTTP status code for the response.
*
* <p>
* This method must be called prior to calling {@link #getResponseBody}.
*
* @param status the response code to send
* @see #getResponseBody
*/
public abstract void setStatus(int status);
/**
* Returns the unresolved address of the remote entity invoking
* this request.
*
* @return the InetSocketAddress of the caller
*/
public abstract InetSocketAddress getRemoteAddress();
/**
* Returns the unresolved local address on which the request was received.
*
* @return the InetSocketAddress of the local interface
*/
public abstract InetSocketAddress getLocalAddress();
/**
* Returns the protocol string from the request in the form
* <i>protocol/majorVersion.minorVersion</i>. For example,
* "HTTP/1.1"
*
* @return the protocol string from the request
*/
public abstract String getProtocol();
/**
* Returns the name of the scheme used to make this request,
* for example: http, or https.
*
* @return name of the scheme used to make this request
*/
public abstract String getScheme();
/**
* Returns the extra path information that follows the web service
* path but precedes the query string in the request URI and will start
* with a "/" character.
*
* <p>
* This can be used for {@link MessageContext#PATH_INFO}
*
* @return decoded extra path information of web service.
* It is the path that comes
* after the web service path but before the query string in the
* request URI
* <tt>null</tt> if there is no extra path in the request URI
*/
public abstract String getPathInfo();
/**
* Returns the query string that is contained in the request URI
* after the path.
*
* <p>
* This can be used for {@link MessageContext#QUERY_STRING}
*
* @return undecoded query string of request URI, or
* <tt>null</tt> if the request URI doesn't have one
*/
public abstract String getQueryString();
/**
* Returns an attribute that is associated with this
* <code>HttpExchange</code>. JAX-WS handlers and endpoints may then
* access the attribute via {@link MessageContext}.
* <p>
* Servlet containers must expose {@link MessageContext#SERVLET_CONTEXT},
* {@link MessageContext#SERVLET_REQUEST}, and
* {@link MessageContext#SERVLET_RESPONSE}
* as attributes.
*
* <p>If the request has been received by the container using HTTPS, the
* following information must be exposed as attributes. These attributes
* are {@link #REQUEST_CIPHER_SUITE}, and {@link #REQUEST_KEY_SIZE}.
* If there is a SSL certificate associated with the request, it must
* be exposed using {@link #REQUEST_X509CERTIFICATE}
*
* @param name attribute name
* @return the attribute value, or <tt>null</tt> if the attribute doesn't
* exist
*/
public abstract Object getAttribute(String name);
/**
* Gives all the attribute names that are associated with
* this <code>HttpExchange</code>.
*
* @return set of all attribute names
* @see #getAttribute(String)
*/
public abstract Set<String> getAttributeNames();
/**
* Returns the {@link Principal} that represents the authenticated
* user for this <code>HttpExchange</code>.
*
* @return Principal for an authenticated user, or
* <tt>null</tt> if not authenticated
*/
public abstract Principal getUserPrincipal();
/**
* Indicates whether an authenticated user is included in the specified
* logical "role".
*
* @param role specifies the name of the role
* @return <tt>true</tt> if the user making this request belongs to a
* given role
*/
public abstract boolean isUserInRole(String role);
}

View File

@@ -0,0 +1,54 @@
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.spi.http;
import javax.xml.ws.Endpoint;
import java.io.IOException;
/**
* A handler which is invoked to process HTTP requests.
* <p>
* JAX-WS runtime provides the implementation for this and sets
* it using {@link HttpContext#setHandler(HttpHandler)} during
* {@link Endpoint#publish(HttpContext) }
*
* @author Jitendra Kotamraju
* @since JAX-WS 2.2
*/
public abstract class HttpHandler {
/**
* Handles a given request and generates an appropriate response.
* See {@link HttpExchange} for a description of the steps
* involved in handling an exchange. Container invokes this method
* when it receives an incoming request.
*
* @param exchange the exchange containing the request from the
* client and used to send the response
* @throws IOException when an I/O error happens during request
* handling
*/
public abstract void handle(HttpExchange exchange) throws IOException;
}

View File

@@ -0,0 +1,95 @@
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
Provides HTTP SPI that is used for portable deployment of JAX-WS
web services in containers(for e.g. servlet containers). This SPI
is not for end developers but provides a way for the container
developers to deploy JAX-WS services portably.
<p>
The portable deployment is done as below:
<ol>
<li>Container creates {@link javax.xml.ws.Endpoint} objects for an
application. The necessary information to create Endpoint objects
may be got from web service deployment descriptor files.</li>
<li>Container needs to create {@link javax.xml.ws.spi.http.HttpContext}
objects for the deployment. For example, a HttpContext could be
created using servlet configuration(for e.g url-pattern) for the
web service in servlet container case.</li>
<li>Then publishes all the endpoints using
{@link javax.xml.ws.Endpoint#publish(HttpContext)}. During publish(),
JAX-WS runtime registers a {@link javax.xml.ws.spi.http.HttpHandler}
callback to handle incoming requests or
{@link javax.xml.ws.spi.http.HttpExchange} objects. The HttpExchange
object encapsulates a HTTP request and a response.
</ol>
<pre>
Container JAX-WS runtime
--------- --------------
1. Creates Invoker1, ... InvokerN
2. Provider.createEndpoint(...) --> 3. creates Endpoint1
configures Endpoint1
...
4. Provider.createEndpoint(...) --> 5. creates EndpointN
configures EndpointN
6. Creates ApplicationContext
7. creates HttpContext1, ... HttpContextN
8. Endpoint1.publish(HttpContext1) --> 9. creates HttpHandler1
HttpContext1.setHandler(HttpHandler1)
...
10. EndpointN.publish(HttpContextN) --> 11. creates HttpHandlerN
HttpContextN.setHandler(HttpHandlerN)
</pre>
The request processing is done as below(for every request):
<pre>
Container JAX-WS runtime
--------- --------------
1. Creates a HttpExchange
2. Gets handler from HttpContext
3. HttpHandler.handle(HttpExchange) --> 4. reads request from HttpExchange
<-- 5. Calls Invoker
6. Invokes the actual instance
7. Writes the response to HttpExchange
</pre>
<p>
The portable undeployment is done as below:
<pre>
Container
---------
1. @preDestroy on instances
2. Endpoint1.stop()
...
3. EndpointN.stop()
</pre>
@author Jitendra Kotamraju
@since JAX-WS 2.2
*/
package javax.xml.ws.spi.http;

View File

@@ -0,0 +1,164 @@
/*
* Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.wsaddressing;
import org.w3c.dom.Element;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAnyAttribute;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.namespace.QName;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.ws.EndpointReference;
import javax.xml.ws.WebServiceException;
import java.util.List;
import java.util.Map;
/**
* This class represents a W3C Addressing EndpointReferece which is
* a remote reference to a web service endpoint that supports the
* W3C WS-Addressing 1.0 - Core Recommendation.
* <p>
* Developers should use this class in their SEIs if they want to
* pass/return endpoint references that represent the W3C WS-Addressing
* recommendation.
* <p>
* JAXB will use the JAXB annotations and bind this class to XML infoset
* that is consistent with that defined by WS-Addressing. See
* <a href="http://www.w3.org/TR/2006/REC-ws-addr-core-20060509/">
* WS-Addressing</a>
* for more information on WS-Addressing EndpointReferences.
*
* @since JAX-WS 2.1
*/
// XmlRootElement allows this class to be marshalled on its own
@XmlRootElement(name="EndpointReference",namespace=W3CEndpointReference.NS)
@XmlType(name="EndpointReferenceType",namespace=W3CEndpointReference.NS)
public final class W3CEndpointReference extends EndpointReference {
private final JAXBContext w3cjc = getW3CJaxbContext();
// should be changed to package private, keeping original modifier to keep backwards compatibility
protected static final String NS = "http://www.w3.org/2005/08/addressing";
// default constructor forbidden ...
// should be private, keeping original modifier to keep backwards compatibility
protected W3CEndpointReference() {
}
/**
* Creates an EPR from infoset representation
*
* @param source A source object containing valid XmlInfoset
* instance consistent with the W3C WS-Addressing Core
* recommendation.
*
* @throws WebServiceException
* If the source does NOT contain a valid W3C WS-Addressing
* EndpointReference.
* @throws NullPointerException
* If the <code>null</code> <code>source</code> value is given
*/
public W3CEndpointReference(Source source) {
try {
W3CEndpointReference epr = w3cjc.createUnmarshaller().unmarshal(source,W3CEndpointReference.class).getValue();
this.address = epr.address;
this.metadata = epr.metadata;
this.referenceParameters = epr.referenceParameters;
this.elements = epr.elements;
this.attributes = epr.attributes;
} catch (JAXBException e) {
throw new WebServiceException("Error unmarshalling W3CEndpointReference " ,e);
} catch (ClassCastException e) {
throw new WebServiceException("Source did not contain W3CEndpointReference", e);
}
}
/**
* {@inheritDoc}
*/
public void writeTo(Result result){
try {
Marshaller marshaller = w3cjc.createMarshaller();
marshaller.marshal(this, result);
} catch (JAXBException e) {
throw new WebServiceException("Error marshalling W3CEndpointReference. ", e);
}
}
private static JAXBContext getW3CJaxbContext() {
try {
return JAXBContext.newInstance(W3CEndpointReference.class);
} catch (JAXBException e) {
throw new WebServiceException("Error creating JAXBContext for W3CEndpointReference. ", e);
}
}
// private but necessary properties for databinding
@XmlElement(name="Address",namespace=NS)
private Address address;
@XmlElement(name="ReferenceParameters",namespace=NS)
private Elements referenceParameters;
@XmlElement(name="Metadata",namespace=NS)
private Elements metadata;
// attributes and elements are not private for performance reasons
// (JAXB can bypass reflection)
@XmlAnyAttribute
Map<QName,String> attributes;
@XmlAnyElement
List<Element> elements;
@XmlType(name="address", namespace=W3CEndpointReference.NS)
private static class Address {
protected Address() {}
@XmlValue
String uri;
@XmlAnyAttribute
Map<QName,String> attributes;
}
@XmlType(name="elements", namespace=W3CEndpointReference.NS)
private static class Elements {
protected Elements() {}
@XmlAnyElement
List<Element> elements;
@XmlAnyAttribute
Map<QName,String> attributes;
}
}

View File

@@ -0,0 +1,356 @@
/*
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.xml.ws.wsaddressing;
import org.w3c.dom.Element;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import javax.xml.namespace.QName;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.spi.Provider;
/**
* This class is used to build <code>W3CEndpointReference</code>
* instances. The intended use of this clsss is for
* an application component, for example a factory component,
* to create an <code>W3CEndpointReference</code> for a
* web service endpoint published by the same
* Java EE application. It can also be used to create
* <code>W3CEndpointReferences</code> for an Java SE based
* endpoint by providing the <code>address</code> property.
* <p>
* When creating a <code>W3CEndpointReference</code> for an
* endpoint that is not published by the same Java EE application,
* the <code>address</code> property MUST be specified.
* <p>
* When creating a <code>W3CEndpointReference</code> for an endpoint
* published by the same Java EE application, the <code>address</code>
* property MAY be <code>null</code> but then the <code>serviceName</code>
* and <code>endpointName</code> MUST specify an endpoint published by
* the same Java EE application.
* <p>
* When the <code>wsdlDocumentLocation</code> is specified it MUST refer
* to a valid WSDL document and the <code>serviceName</code> and
* <code>endpointName</code> (if specified) MUST match a service and port
* in the WSDL document.
*
* @since JAX-WS 2.1
*/
public final class W3CEndpointReferenceBuilder {
/**
* Creates a new <code>W3CEndpointReferenceBuilder</code> instance.
*/
public W3CEndpointReferenceBuilder() {
referenceParameters = new ArrayList<Element>();
metadata = new ArrayList<Element>();
attributes = new HashMap<QName, String>();
elements = new ArrayList<Element>();
}
/**
* Sets the <code>address</code> to the
* <code>W3CEndpointReference</code> instance's
* <code>wsa:Address</code>.
* <p>
* The <code>address</code> MUST be set to a non-<code>null</code>
* value when building a <code>W3CEndpointReference</code> for a
* web service endpoint that is not published by the same
* Java EE application or when running on Java SE.
*
* @param address The address of the endpoint to be targeted
* by the returned <code>W3CEndpointReference</code>.
*
* @return A <code>W3CEndpointReferenceBuilder</code> instance with
* the <code>address</code> set to the <code>wsa:Address</code>.
*/
public W3CEndpointReferenceBuilder address(String address) {
this.address = address;
return this;
}
/**
* Sets the <code>interfaceName</code> as the
* <code>wsam:InterfaceName</code> element in the
* <code>wsa:Metadata</code> element.
*
* See <a href="http://www.w3.org/TR/2007/REC-ws-addr-metadata-20070904/#refmetadatfromepr">
* 2.1 Referencing WSDL Metadata from an EPR</a> for more details.
*
* @param interfaceName The port type name of the endpoint to be targeted
* by the returned <code>W3CEndpointReference</code>.
*
* @return A <code>W3CEndpointReferenceBuilder</code> instance with
* the <code>interfaceName</code> as <code>wsam:InterfaceName</code>
* element added to the <code>wsa:Metadata</code> element
*/
public W3CEndpointReferenceBuilder interfaceName(QName interfaceName) {
this.interfaceName = interfaceName;
return this;
}
/**
* Sets the <code>serviceName</code> as the
* <code>wsam:ServiceName</code> element in the
* <code>wsa:Metadata</code> element.
*
* See <a href="http://www.w3.org/TR/2007/REC-ws-addr-metadata-20070904/#refmetadatfromepr">
* 2.1 Referencing WSDL Metadata from an EPR</a> for more details.
*
* @param serviceName The service name of the endpoint to be targeted
* by the returned <code>W3CEndpointReference</code>. This property
* may also be used with the <code>endpointName</code> (portName)
* property to lookup the <code>address</code> of a web service
* endpoint that is published by the same Java EE application.
*
* @return A <code>W3CEndpointReferenceBuilder</code> instance with
* the <code>serviceName</code> as <code>wsam:ServiceName</code>
* element added to the <code>wsa:Metadata</code> element
*
*/
public W3CEndpointReferenceBuilder serviceName(QName serviceName) {
this.serviceName = serviceName;
return this;
}
/**
* Sets the <code>endpointName</code> as
* <code>wsam:ServiceName/@EndpointName</code> in the
* <code>wsa:Metadata</code> element. This method can only be called
* after the {@link #serviceName} method has been called.
* <p>
* See <a href="http://www.w3.org/TR/2007/REC-ws-addr-metadata-20070904/#refmetadatfromepr">
* 2.1 Referencing WSDL Metadata from an EPR</a> for more details.
*
* @param endpointName The name of the endpoint to be targeted
* by the returned <code>W3CEndpointReference</code>. The
* <code>endpointName</code> (portName) property may also be
* used with the <code>serviceName</code> property to lookup
* the <code>address</code> of a web service
* endpoint published by the same Java EE application.
*
* @return A <code>W3CEndpointReferenceBuilder</code> instance with
* the <code>endpointName</code> as
* <code>wsam:ServiceName/@EndpointName</code> in the
* <code>wsa:Metadata</code> element.
*
* @throws IllegalStateException, if the <code>serviceName</code>
* has not been set.
* @throws IllegalArgumentException, if the <code>endpointName</code>'s
* Namespace URI doesn't match <code>serviceName</code>'s Namespace URI
*
*/
public W3CEndpointReferenceBuilder endpointName(QName endpointName) {
if (serviceName == null) {
throw new IllegalStateException("The W3CEndpointReferenceBuilder's serviceName must be set before setting the endpointName: "+endpointName);
}
this.endpointName = endpointName;
return this;
}
/**
* Sets the <code>wsdlDocumentLocation</code> that will be referenced
* as <code>wsa:Metadata/@wsdli:wsdlLocation</code>. The namespace name
* for the wsdli:wsdlLocation's value can be taken from the WSDL itself.
*
* <p>
* See <a href="http://www.w3.org/TR/2007/REC-ws-addr-metadata-20070904/#refmetadatfromepr">
* 2.1 Referencing WSDL Metadata from an EPR</a> for more details.
*
* @param wsdlDocumentLocation The location of the WSDL document to
* be referenced in the <code>wsa:Metadata</code> of the
* <code>W3CEndpointReference</code>.
* @return A <code>W3CEndpointReferenceBuilder</code> instance with
* the <code>wsdlDocumentLocation</code> that is to be referenced.
*/
public W3CEndpointReferenceBuilder wsdlDocumentLocation(String wsdlDocumentLocation) {
this.wsdlDocumentLocation = wsdlDocumentLocation;
return this;
}
/**
* Adds the <code>referenceParameter</code> to the
* <code>W3CEndpointReference</code> instance
* <code>wsa:ReferenceParameters</code> element.
*
* @param referenceParameter The element to be added to the
* <code>wsa:ReferenceParameters</code> element.
*
* @return A <code>W3CEndpointReferenceBuilder</code> instance with
* the <code>referenceParameter</code> added to the
* <code>wsa:ReferenceParameters</code> element.
*
* @throws java.lang.IllegalArgumentException if <code>referenceParameter</code>
* is <code>null</code>.
*/
public W3CEndpointReferenceBuilder referenceParameter(Element referenceParameter) {
if (referenceParameter == null)
throw new java.lang.IllegalArgumentException("The referenceParameter cannot be null.");
referenceParameters.add(referenceParameter);
return this;
}
/**
* Adds the <code>metadataElement</code> to the
* <code>W3CEndpointReference</code> instance's
* <code>wsa:Metadata</code> element.
*
* @param metadataElement The element to be added to the
* <code>wsa:Metadata</code> element.
*
* @return A <code>W3CEndpointReferenceBuilder</code> instance with
* the <code>metadataElement</code> added to the
* <code>wsa:Metadata</code> element.
*
* @throws java.lang.IllegalArgumentException if <code>metadataElement</code>
* is <code>null</code>.
*/
public W3CEndpointReferenceBuilder metadata(Element metadataElement) {
if (metadataElement == null)
throw new java.lang.IllegalArgumentException("The metadataElement cannot be null.");
metadata.add(metadataElement);
return this;
}
/**
* Adds an extension element to the
* <code>W3CEndpointReference</code> instance's
* <code>wsa:EndpointReference</code> element.
*
* @param element The extension element to be added to the
* <code>W3CEndpointReference</code>
* @return A <code>W3CEndpointReferenceBuilder</code> instance with
* the extension <code>element</code> added to the
* <code>W3CEndpointReference</code> instance.
* @throws java.lang.IllegalArgumentException if <code>element</code>
* is <code>null</code>.
*
* @since JAX-WS 2.2
*/
public W3CEndpointReferenceBuilder element(Element element) {
if (element == null) {
throw new IllegalArgumentException("The extension element cannot be null.");
}
elements.add(element);
return this;
}
/**
* Adds an extension attribute to the
* <code>W3CEndpointReference</code> instance's
* <code>wsa:EndpointReference</code> element.
*
* @param name The name of the extension attribute to be added to the
* <code>W3CEndpointReference</code>
* @param value extension attribute value
* @return A <code>W3CEndpointReferenceBuilder</code> instance with
* the extension attribute added to the <code>W3CEndpointReference</code>
* instance.
* @throws java.lang.IllegalArgumentException if <code>name</code>
* or <code>value</code> is <code>null</code>.
*
* @since JAX-WS 2.2
*/
public W3CEndpointReferenceBuilder attribute(QName name, String value) {
if (name == null || value == null) {
throw new IllegalArgumentException("The extension attribute name or value cannot be null.");
}
attributes.put(name, value);
return this;
}
/**
* Builds a <code>W3CEndpointReference</code> from the accumulated
* properties set on this <code>W3CEndpointReferenceBuilder</code>
* instance.
* <p>
* This method can be used to create a <code>W3CEndpointReference</code>
* for any endpoint by specifying the <code>address</code> property along
* with any other desired properties. This method
* can also be used to create a <code>W3CEndpointReference</code> for
* an endpoint that is published by the same Java EE application.
* This method can automatically determine the <code>address</code> of
* an endpoint published by the same Java EE application that is identified by the
* <code>serviceName</code> and
* <code>endpointName</code> properties. If the <code>address</code> is
* <code>null</code> and the <code>serviceName</code> and
* <code>endpointName</code>
* do not identify an endpoint published by the same Java EE application, a
* <code>java.lang.IllegalStateException</code> MUST be thrown.
*
*
* @return <code>W3CEndpointReference</code> from the accumulated
* properties set on this <code>W3CEndpointReferenceBuilder</code>
* instance. This method never returns <code>null</code>.
*
* @throws IllegalStateException
* <ul>
* <li>If the <code>address</code>, <code>serviceName</code> and
* <code>endpointName</code> are all <code>null</code>.
* <li>If the <code>serviceName</code> service is <code>null</code> and the
* <code>endpointName</code> is NOT <code>null</code>.
* <li>If the <code>address</code> property is <code>null</code> and
* the <code>serviceName</code> and <code>endpointName</code> do not
* specify a valid endpoint published by the same Java EE
* application.
* <li>If the <code>serviceName</code> is NOT <code>null</code>
* and is not present in the specified WSDL.
* <li>If the <code>endpointName</code> port is not <code>null</code> and it
* is not present in <code>serviceName</code> service in the WSDL.
* <li>If the <code>wsdlDocumentLocation</code> is NOT <code>null</code>
* and does not represent a valid WSDL.
* </ul>
* @throws WebServiceException If an error occurs while creating the
* <code>W3CEndpointReference</code>.
*
*/
public W3CEndpointReference build() {
if (elements.isEmpty() && attributes.isEmpty() && interfaceName == null) {
// 2.1 API
return Provider.provider().createW3CEndpointReference(address,
serviceName, endpointName, metadata, wsdlDocumentLocation,
referenceParameters);
}
return Provider.provider().createW3CEndpointReference(address,
interfaceName, serviceName, endpointName, metadata, wsdlDocumentLocation,
referenceParameters, elements, attributes);
}
private String address;
private List<Element> referenceParameters;
private List<Element> metadata;
private QName interfaceName;
private QName serviceName;
private QName endpointName;
private String wsdlDocumentLocation;
private Map<QName,String> attributes;
private List<Element> elements;
}

View File

@@ -0,0 +1,28 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
@javax.xml.bind.annotation.XmlSchema(namespace=W3CEndpointReference.NS,
location="http://www.w3.org/2006/03/addressing/ws-addr.xsd")
package javax.xml.ws.wsaddressing;