If you want to create Soap WebServices you first have to extend your standalone.xml file. Add the module and it’s configuration:
... <extensions> ... <extension module="org.jboss.as.webservices"/> ... </extensions> ... <profile> ... <subsystem xmlns="urn:jboss:domain:webservices:1.0" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:jaxwsconfig="urn:jboss:jbossws-jaxws-config:4.0"> <wsdl-host> localhost </wsdl-host> <modify-wsdl-address> true </modify-wsdl-address> <endpoint-config> <jaxwsconfig:config-name> Standard-Endpoint-Config </jaxwsconfig:config-name> </endpoint-config> <endpoint-config> <jaxwsconfig:config-name> Recording-Endpoint-Config </jaxwsconfig:config-name> <jaxwsconfig:pre-handler-chains> <javaee:handler-chain> <javaee:protocol-bindings> ##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM </javaee:protocol-bindings> <javaee:handler> <javaee:handler-name> RecordingHandler </javaee:handler-name> <javaee:handler-class> org.jboss.ws.common.invocation.RecordingServerHandler </javaee:handler-class> </javaee:handler> </javaee:handler-chain> </jaxwsconfig:pre-handler-chains> </endpoint-config> </subsystem> ... </profile>
You find a template in standalone-ha.xml.
And here an example WebService with Interface.
import java.util.logging.Logger; import javax.ejb.Stateless; import javax.inject.Inject; import javax.jws.WebService; import javax.xml.ws.soap.Addressing; import javax.xml.ws.soap.MTOM; /** * * @author manuel * */ @Stateless @WebService(endpointInterface = "at.coffeebeans.shop.soap.SoapServiceIface", serviceName = "SoapService", portName = "SoapServicePort") @MTOM(enabled = true) @Addressing(enabled = true, required = true) public class SoapService implements SoapServiceIface { @Inject private Logger log; @Override public String ping(final String payload) throws SoapServiceError { if (null == payload) { log.warning("ping with no payload"); throw new SoapServiceError("payload must not be null"); } log.info("ping from " + payload); return "pong from " + payload; } }
import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; /** * * @author manuel * */ @WebService(targetNamespace = "http://coffeebeans.at/shop/soap") public interface SoapServiceIface { @WebMethod(operationName = "ping") public String ping(@WebParam(name = "payload") final String payload) throws SoapServiceError; }
import javax.xml.ws.WebFault; /** * @author manuel * */ @WebFault public class SoapServiceError extends Exception { /** UID. */ private static final long """"serialVersionUID"""" = 5063725310269125585L; public SoapServiceError() { super(); } public SoapServiceError(final Exception exc) { super(exc); } public SoapServiceError(final String msg) { super(msg); } }
In my example, the project is accessible over http://localhost:8080/shop and the WebService WSDL is under http://localhost:8080/shop/SoapService/SoapService?wsdl
If you use maven, the following dependencies should add full WebService support that is included in JBoss AS7:
<dependencies> <dependency> <groupId>org.jboss.ws</groupId> <artifactId>jbossws-api</artifactId> <version>1.0.0.Beta2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.ws.security</groupId> <artifactId>wss4j</artifactId> <version>1.6.1</version> <scope>provided</scope> </dependency> </dependencies>