diff -r 88b85470e72c -r f50545b5e2f1 src/share/jaxws_classes/com/sun/xml/internal/ws/client/package-info.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/jaxws_classes/com/sun/xml/internal/ws/client/package-info.java Tue Mar 06 16:09:35 2012 -0800 @@ -0,0 +1,157 @@ +/* + * Copyright (c) 1997, 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. + */ + +/** + *

JAX-WS 2.0.1 Client Runtime

+ *

This document describes the architecture of client side + * JAX-WS 2.0.1 runtime. + * + *

JAX-WS 2.0.1 Client Sequence Diagram

+ * + *

JAX-WS 2.0.1 Asynchronous Invocation Sequence Diagram

+ * + *

JAX-WS 2.0.1 Dispatch Invocation Sequence Diagram

+ * + + *

Message Flow

+ * {@link com.sun.xml.internal.ws.client.WebService} provides client view of a Web service. + * WebService.getPort returns an instance of {@link com.sun.xml.internal.ws.client.EndpointIFInvocationHandler} + * with {@link com.sun.pept.ept.ContactInfoList} and {@link com.sun.pept.Delegate} + * initialized. A method invocation on the port, obtained from WebService, invokes + * {@link com.sun.xml.internal.ws.client.EndpointIFInvocationHandler#invoke}. This method + * then creates a {@link com.sun.pept.ept.MessageInfo} and populates the data + * (parameters specified by the user) and metadata such as RuntimeContext, RequestContext, + * Message Exchange Pattern into this MessageInfo. This method then invokes + * {@link com.sun.pept.Delegate#send} and returns the response. + *

+ * The Delegate.send method iterates through the ContactInfoList and picks up the + * correct {@link com.sun.pept.ept.ContactInfo} based upon the binding id of + * {@link javax.xml.ws.BindingProvider} and sets it on the MessageInfo. After the + * Delegate obtains a specific ContactInfo it uses that ContactInfo to obtain a + * protocol-specific {@link com.sun.pept.protocol.MessageDispatcher}. There will be + * two types of client-side MessageDispatchers for JAX-WS 2.0.1, + * {@link com.sun.xml.internal.ws.protocol.soap.client.SOAPMessageDispatcher} and + * {@link com.sun.xml.internal.ws.protocol.xml.client.XMLMessageDispatcher}. The Delegate + * then invokes {@link com.sun.pept.protocol.MessageDispatcher#send}. The + * MessageDispatcher.send method makes a decision about the synchronous and + * asynchronous nature of the message exchange pattern and invokes separate methods + * accordingly. + *

+ * The MessageDispatcher uses ContactInfo to obtain + * a {@link com.sun.xml.internal.ws.encoding.soap.client.SOAPXMLEncoder} which converts + * the MessageInfo to {@link com.sun.xml.internal.ws.encoding.soap.internal.InternalMessage}. + * There will be two types of client-side SOAPXMLEncoder for JAX-WS 2.0.1, + * SOAPXMEncoder for SOAP 1.1 and {@link com.sun.xml.internal.ws.encoding.soap.client.SOAP12XMLEncoder} + * for SOAP 1.2. The MessageDispatcher invokes configured handlers and use the + * codec to convert the InternalMessage to a {@link javax.xml.soap.SOAPMessage}. + * The metadata from the MessageInfo is classified into {@link javax.xml.soap.MimeHeaders} + * of this SOAPMessage and context information for {@link com.sun.xml.internal.ws.api.server.WSConnection}. + * The SOAPMessge is then written to the output stream of the WSConnection + * obtained from MessageInfo. + *

+ * The MessageDispatcher.receive method handles the response. The + * SOAPMessageDispatcher extracts the SOAPMessage from the input stream of + * WSConnection and performs the mustUnderstand processing followed by invocation + * of any handlers. The MessageDispatcher uses ContactInfo to obtain a + * {@link com.sun.xml.internal.ws.encoding.soap.client.SOAPXMLDecoder} which converts the SOAPMessage + * to InternalMessage and then InternalMessage to MessageInfo. There will be two types of + * client-side SOAPXMLDecoder for JAX-WS 2.0.1, SOAPXMLDencoder for SOAP 1.1 and + * {@link com.sun.xml.internal.ws.encoding.soap.client.SOAP12XMLDecoder} for SOAP 1.2. The + * response is returned back to the client code via Delegate. + * + *

External Interactions

+ *

SAAJ API

+ * + *

MessageFactory(binding).createMessage(MimeHeaders, InputStream)

+ * + *

JAXB API

+ *

JAX-WS RI uses the JAXB API to marshall/unmarshall user created + * JAXB objects with user created {@link javax.xml.bind.JAXBContext JAXBContext}. + * Handler, Dispatch in JAX-WS API provide ways for the user to specify his/her own + * JAXBContext. {@link com.sun.xml.internal.ws.encoding.jaxb.JAXBTypeSerializer JAXBTypeSerializer} class uses all these methods.

+ * + * The following two JAXB classes are implemented by JAX-WS to enable/implement MTOM and XOP + * + *

JAXB Runtime-API (private contract)

+ *

JAX-WS RI uses these private API for serialization/deserialization + * purposes. This private API is used to serialize/deserialize method + * parameters at the time of JAXBTypeSerializer class uses all + * these methods.

+ * + * + * @ArchitectureDocument + **/ +package com.sun.xml.internal.ws.client; + +import com.sun.xml.internal.bind.api.BridgeContext; + +import javax.xml.transform.Result; +import javax.xml.transform.Source; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; + +import org.w3c.dom.Node;