/*
* Copyright (c) 1997, 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.
*/
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.sun.xml.internal.ws.assembler;
import com.sun.istack.internal.NotNull;
import com.sun.istack.internal.Nullable;
import com.sun.xml.internal.ws.api.model.SEIModel;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLPort;
import com.sun.xml.internal.ws.api.pipe.Codec;
import com.sun.xml.internal.ws.api.pipe.ServerTubeAssemblerContext;
import com.sun.xml.internal.ws.api.pipe.Tube;
import com.sun.xml.internal.ws.api.server.WSEndpoint;
import com.sun.xml.internal.ws.assembler.dev.ServerTubelineAssemblyContext;
import com.sun.xml.internal.ws.policy.PolicyMap;
The context is a wrapper around the existing JAX-WS ServerTubeAssemblerContext
with additional features Author: Marek Potociar (marek.potociar at sun.com)
/**
* The context is a wrapper around the existing JAX-WS {@link ServerTubeAssemblerContext} with additional features
*
* @author Marek Potociar (marek.potociar at sun.com)
*/
class DefaultServerTubelineAssemblyContext extends TubelineAssemblyContextImpl implements ServerTubelineAssemblyContext {
private final @NotNull ServerTubeAssemblerContext wrappedContext;
private final PolicyMap policyMap;
// TODO: add next tube getter/package-private setter
// TODO: replace the PipeConfiguration
public DefaultServerTubelineAssemblyContext(@NotNull ServerTubeAssemblerContext context) {
this.wrappedContext = context;
this.policyMap = context.getEndpoint().getPolicyMap();
}
public PolicyMap getPolicyMap() {
return policyMap;
}
public boolean isPolicyAvailable() {
return policyMap != null && !policyMap.isEmpty();
}
The created pipeline will use seiModel to get java concepts for the endpoint
Returns: Null if the service doesn't have SEI model e.g. Provider endpoints,
and otherwise non-null.
/**
* The created pipeline will use seiModel to get java concepts for the endpoint
*
* @return Null if the service doesn't have SEI model e.g. Provider endpoints,
* and otherwise non-null.
*/
public @Nullable SEIModel getSEIModel() {
return wrappedContext.getSEIModel();
}
The created pipeline will be used to serve this port.
Returns: Null if the service isn't associated with any port definition in WSDL,
and otherwise non-null.
/**
* The created pipeline will be used to serve this port.
*
* @return Null if the service isn't associated with any port definition in WSDL,
* and otherwise non-null.
*/
public @Nullable WSDLPort getWsdlPort() {
return wrappedContext.getWsdlModel();
}
The created pipeline is used to serve this WSEndpoint
. Specifically, its WSBinding
should be of interest to many Pipe
s. @return Always non-null. /**
*
* The created pipeline is used to serve this {@link com.sun.xml.internal.ws.api.server.WSEndpoint}.
* Specifically, its {@link com.sun.xml.internal.ws.api.WSBinding} should be of interest to many
* {@link com.sun.xml.internal.ws.api.pipe.Pipe}s.
* @return Always non-null.
*/
public @NotNull WSEndpoint getEndpoint() {
return wrappedContext.getEndpoint();
}
The last Pipe
in the pipeline. The assembler is expected to put additional Pipe
s in front of it. (Just to give you the idea how this is used, normally the terminal pipe is the one that invokes the user application or Provider
.)
Returns: always non-null terminal pipe
/**
* The last {@link com.sun.xml.internal.ws.api.pipe.Pipe} in the pipeline. The assembler is expected to put
* additional {@link com.sun.xml.internal.ws.api.pipe.Pipe}s in front of it.
*
* <p>
* (Just to give you the idea how this is used, normally the terminal pipe
* is the one that invokes the user application or {@link javax.xml.ws.Provider}.)
*
* @return always non-null terminal pipe
*/
public @NotNull Tube getTerminalTube() {
return wrappedContext.getTerminalTube();
}
If this server pipeline is known to be used for serving synchronous transport,
then this method returns true. This can be potentially use as an optimization
hint, since often synchronous versions are cheaper to execute than asycnhronous
versions.
/**
* If this server pipeline is known to be used for serving synchronous transport,
* then this method returns true. This can be potentially use as an optimization
* hint, since often synchronous versions are cheaper to execute than asycnhronous
* versions.
*/
public boolean isSynchronous() {
return wrappedContext.isSynchronous();
}
Gets the Codec
that is set by setCodec
or the default codec based on the binding. The codec is a full codec that is responsible for encoding/decoding entire protocol message(for e.g: it is responsible to encode/decode entire MIME messages in SOAP binding) See Also: Returns: codec to be used for web service requests
/**
* Gets the {@link Codec} that is set by {@link #setCodec} or the default codec
* based on the binding. The codec is a full codec that is responsible for
* encoding/decoding entire protocol message(for e.g: it is responsible to
* encode/decode entire MIME messages in SOAP binding)
*
* @return codec to be used for web service requests
* @see {@link com.sun.xml.internal.ws.api.pipe.Codecs}
*/
public @NotNull Codec getCodec() {
return wrappedContext.getCodec();
}
Interception point to change Codec
during Tube
line assembly. The new codec will be used by jax-ws server runtime for encoding/decoding web service request/response messages. WSEndpoint.createCodec()
will return a copy of this new codec and will be used in the server runtime.
The codec is a full codec that is responsible for
encoding/decoding entire protocol message(for e.g: it is responsible to
encode/decode entire MIME messages in SOAP binding)
the codec should correctly implement Codec.copy
since it is used while serving requests concurrently.
Params: - codec – codec to be used for web service requests
See Also:
/**
* Interception point to change {@link Codec} during {@link Tube}line assembly. The
* new codec will be used by jax-ws server runtime for encoding/decoding web service
* request/response messages. {@link WSEndpoint#createCodec()} will return a copy
* of this new codec and will be used in the server runtime.
*
* <p>
* The codec is a full codec that is responsible for
* encoding/decoding entire protocol message(for e.g: it is responsible to
* encode/decode entire MIME messages in SOAP binding)
*
* <p>
* the codec should correctly implement {@link Codec#copy} since it is used while
* serving requests concurrently.
*
* @param codec codec to be used for web service requests
* @see {@link com.sun.xml.internal.ws.api.pipe.Codecs}
*/
public void setCodec(@NotNull Codec codec) {
wrappedContext.setCodec(codec);
}
public ServerTubeAssemblerContext getWrappedContext() {
return wrappedContext;
}
}