CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-javax--javaee-api

Complete Java Enterprise Edition 8 specification APIs providing all standardized enterprise application development interfaces

Pending
Overview
Eval results
Files

web-services.mddocs/

Web Services

JAX-WS API for building SOAP-based web services with annotation-driven development, comprehensive client support, and WSDL generation.

Web Service Development

Web Service Annotations

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface WebService {
    String name() default "";
    String targetNamespace() default "";
    String serviceName() default "";
    String portName() default "";
    String wsdlLocation() default "";
    String endpointInterface() default "";
}

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface WebMethod {
    String operationName() default "";
    String action() default "";
    boolean exclude() default false;
}

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface WebParam {
    String name() default "";
    String targetNamespace() default "";
    Mode mode() default Mode.IN;
    boolean header() default false;
    String partName() default "";
}

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface WebResult {
    String name() default "";
    String targetNamespace() default "";
    boolean header() default false;
    String partName() default "";
}

Service Endpoint Interface

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface WebServiceProvider {
    String targetNamespace() default "";
    String serviceName() default "";
    String portName() default "";
    String wsdlLocation() default "";
}

public interface Provider<T> {
    T invoke(T request);
}

Client API

Service and Port Access

public class Service {
    public static Service create(URL wsdlDocumentLocation, QName serviceName);
    public static Service create(QName serviceName);
    public <T> T getPort(QName portName, Class<T> serviceEndpointInterface);
    public <T> T getPort(Class<T> serviceEndpointInterface);
    public void addPort(QName portName, String bindingId, String endpointAddress);
    
    public <T> Dispatch<T> createDispatch(QName portName, Class<T> type, Service.Mode mode);
    public Dispatch<Source> createDispatch(QName portName, Service.Mode mode);
    
    public Executor getExecutor();
    public void setExecutor(Executor executor);
    
    public HandlerResolver getHandlerResolver();
    public void setHandlerResolver(HandlerResolver handlerResolver);
}

public interface Dispatch<T> extends BindingProvider {
    T invoke(T msg);
    Response<T> invokeAsync(T msg);
    Future<?> invokeAsync(T msg, AsyncHandler<T> handler);
    void invokeOneWay(T msg);
}

Binding Provider Interface

public interface BindingProvider {
    Map<String, Object> getRequestContext();
    Map<String, Object> getResponseContext();
    Binding getBinding();
    EndpointReference getEndpointReference();
    <T extends EndpointReference> T getEndpointReference(Class<T> clazz);
    
    String ENDPOINT_ADDRESS_PROPERTY = "javax.xml.ws.service.endpoint.address";
    String USERNAME_PROPERTY = "javax.xml.ws.security.auth.username";
    String PASSWORD_PROPERTY = "javax.xml.ws.security.auth.password";
    String SESSION_MAINTAIN_PROPERTY = "javax.xml.ws.session.maintain";
    String SOAPACTION_USE_PROPERTY = "javax.xml.ws.soap.http.soapaction.use";
    String SOAPACTION_URI_PROPERTY = "javax.xml.ws.soap.http.soapaction.uri";
}

Handler Framework

Handler Interfaces

public interface Handler<C extends MessageContext> {
    boolean handleMessage(C context);
    boolean handleFault(C context);
    void close(MessageContext context);
}

public interface SOAPHandler<T extends SOAPMessageContext> extends Handler<T> {
    Set<QName> getHeaders();
}

public interface LogicalHandler<C extends LogicalMessageContext> extends Handler<C> {
}

public interface HandlerResolver {
    List<Handler> getHandlerChain(PortInfo portInfo);
}

Message Context

public interface MessageContext extends Map<String, Object> {
    Scope getScope(String name);
    void setScope(String name, Scope scope);
    
    String MESSAGE_OUTBOUND_PROPERTY = "javax.xml.ws.handler.message.outbound";
    String INBOUND_MESSAGE_ATTACHMENTS = "javax.xml.ws.binding.attachments.inbound";
    String OUTBOUND_MESSAGE_ATTACHMENTS = "javax.xml.ws.binding.attachments.outbound";
    
    enum Scope {
        APPLICATION, HANDLER
    }
}

public interface SOAPMessageContext extends MessageContext {
    SOAPMessage getMessage();
    void setMessage(SOAPMessage message);
    Object[] getHeaders(QName header, JAXBContext context, boolean allRoles);
    Set<String> getRoles();
}

public interface LogicalMessageContext extends MessageContext {
    LogicalMessage getMessage();
}

SOAP Binding and Faults

SOAP Binding

public interface SOAPBinding extends Binding {
    Set<String> getRoles();
    void setRoles(Set<String> roles);
    boolean isMTOMEnabled();
    void setMTOMEnabled(boolean flag);
    
    String SOAP11HTTP_BINDING = "http://schemas.xmlsoap.org/wsdl/soap/http";
    String SOAP12HTTP_BINDING = "http://www.w3.org/2003/05/soap/bindings/HTTP/";
    String SOAP11HTTP_MTOM_BINDING = "http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true";
    String SOAP12HTTP_MTOM_BINDING = "http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true";
}

SOAP Faults

public class SOAPFaultException extends ProtocolException {
    public SOAPFaultException(SOAPFault fault);
    public SOAPFault getFault();
}

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface FaultAction {
    String value() default "";
    Class<? extends Exception> className();
}

Usage Examples

Simple Web Service

@WebService
public class HelloWorldService {
    
    @WebMethod
    public String sayHello(@WebParam(name = "name") String name) {
        return "Hello, " + name + "!";
    }
}

Web Service Client

// Create service from WSDL
URL wsdlURL = new URL("http://localhost:8080/hello?wsdl");
QName serviceName = new QName("http://example.com/", "HelloWorldService");
Service service = Service.create(wsdlURL, serviceName);

// Get port
HelloWorldService port = service.getPort(HelloWorldService.class);

// Call web service
String result = port.sayHello("World");

Provider-based Service

@WebServiceProvider
@ServiceMode(Service.Mode.MESSAGE)
public class MessageProvider implements Provider<SOAPMessage> {
    
    @Override
    public SOAPMessage invoke(SOAPMessage request) {
        // Process SOAP message
        return response;
    }
}

Install with Tessl CLI

npx tessl i tessl/maven-javax--javaee-api

docs

dependency-injection.md

ejb.md

enterprise-services.md

index.md

json-processing.md

messaging.md

persistence.md

rest-services.md

security.md

transactions.md

validation.md

web-services.md

web-technologies.md

xml-binding.md

tile.json