JAX-RS
Weblogic 12c version 12.1.2.1 now ships by default with JAX-RS 1.1 as a core library. Previously in Weblogic 12.1.1.0 the following shared web applications were required - now we just use the specification library.Library jackson-core-asl(1.0,1.1.1) Active Library Library jersey-bundle(1.1.1,1.1.5.1) Active Library Library jettison(1.1,1.1) Active Library Library jsr311-api(1.1.1,1.1.1) Active LibraryNow in eclipse just add the JAX-RS facet which will add the jersey servlet to your web.xml
<servlet> <description>JAX-RS Tools Generated - Do not modify</description> <servlet-name>JAX-RS Servlet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JAX-RS Servlet</servlet-name> <url-pattern>/jaxrs/*</url-pattern> </servlet-mapping>
JAX-RPC
Jax-RPC has fallen out of favor for most new web services in favor of JAX-RS 1.1 or REST.A simple java SE example that is single threaded and runs off of Metro included in Java SE 1.6.
This example does not need a web container or a full application server to run - however it is non-scalable and thread-blocking simple example.
ServiceEndpoint.java
package org.dataparallel.example.jaxws;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
/**
* definitions targetNamespace="http://jaxws.example.dataparallel.org/" name="ServiceEndpointImplService
*
*/
@WebService
@SOAPBinding(style = Style.RPC)
public interface ServiceEndpoint {
public static final String URL = http://127.0.0.1;
public static final String PORT = "8980";
public static final String SERVICE_NAME = "service";
public static final String SERVICE_URI = URL + ":" + PORT + "/" + SERVICE_NAME;
public static final String DOMAIN_NAME = "http://jaxws.example.dataparallel.org/";
@WebMethod
public String getImage();
}
ServiceEndpointImpl.java
package org.dataparallel.example.jaxws;
import javax.jws.WebService;
@WebService(endpointInterface="org.dataparallel.example.jaxws.ServiceEndpoint")
public class ServiceEndpointImpl implements ServiceEndpoint {
@Override
public String getImage() {
System.out.println("_ServiceEndpointImpl.getImage()");
return "aString";
}
}
ServiceEndpointPublisher.java
package org.dataparallel.example.jaxws;
import javax.xml.ws.Endpoint;
public class ServiceEndpointPublisher {
public void publish() {
publish(ServiceEndpoint.SERVICE_URI, new ServiceEndpointImpl());
}
public void publish(String url, ServiceEndpoint service) {
Endpoint.publish(url, service);
}
/**
* http://127.0.0.1:8980/service?wsdl
*/
public static void main(String[] args) {
// single threaded testing service
ServiceEndpointPublisher aPublisher = new ServiceEndpointPublisher();
aPublisher.publish();
}
ServiceClient.java
package org.dataparallel.example.jaxws;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class ServiceClient {
public void callService() {
try {
URL aWsdlURL = new URL(ServiceEndpoint.SERVICE_URI + "?wsdl");
QName aQName = new QName(ServiceEndpoint.DOMAIN_NAME,ServiceEndpointImpl.class.getSimpleName() + "Service");
Service aService = Service.create(aWsdlURL, aQName);
ServiceEndpoint anEndpointInterface = aService.getPort(ServiceEndpoint.class);
System.out.println("Service.getImage: " + anEndpointInterface.getImage());
} catch (MalformedURLException mue) {
mue.printStackTrace();
}
}
public static void main(String[] args) {
ServiceClient aClient = new ServiceClient();
aClient.callService();
}
}
JAX-WS
Jax-WS has fallen out of favor for most new web services in favor of JAX-RS 1.1 or REST - it still has a place for specific SOAP clients or data types.
JAX-RS
- in queue - see
http://wiki.eclipse.org/EclipseLink/Development/2.4.0/JPA-RS/REST-API