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>