SOAP/HTTP + WSDL as a contract. What about JAX-WS? - java

I'm a newbie to webservice, and I've read this chapter (and some other articles) to get an idea about SOAP. Sad, I couldn't find the next chapter about WSDL in java.net.
Anyway, let's suppose I need to implement SOAP 1.1/HTTP 1.1.
The used "contract" to exchange information is WSDL.
So, in order to create webservices provider :
What would be the role of JAX-WS?
Would it be needed or is it an alternative to WSDL?
If needed, shall we combine it with ( SOAP/HTTP + WSDL)?
What would be the role of JAX-WS in this combination?
Could it be replaced by JAX-RPC (or by something else)?
Is JAX-WS cross-platform or only specific to Java?
If moving to another platform, such as C or C++ or Python, would we be able to use JAX-WS if needed to be combined?
Talking C#,.Net... Is JAX-WS similar to WCF?
Thank in advance :)

SOAP and HTTP are message protocols. JAX-WS is the implementation in java for generating these messages. It handles all the low level details of converting java objects to SOAP messages, generating java classes based on WSDL and XSDs. JAX-WS is used for creating SOAP based as well as Rest based messages. It is the underlying technology that handles the messages on both client and server side. JAX-WS implementation is based on WSDL and SOAP standards. It is java specific.
I am not aware of what WCF is.

SOAP 1.1/HTTP 1.1.
SOAP(XML based Message protocol) over HTTP(Transport Protocol)
The used "contract" to exchange information is WSDL
Everyone wants to define their own way and framework to describe their webservice. So Microsoft has created contracts for WCF framework.The content of the WSDL document defines the contract of the web service for ex. service, data, fault, message contracts. RIP developers.
What would be the role of JAX-WS?
JAVA API for XML based web services. Use to create soap based webservice provider. It uses annotations.
Would it be needed or is it an alternative to WSDL?
JAX-ws is a framework or API.It is an alternative to WCF, you can say not WSDL. WSDL is a document which describes your webservice in XML format.
If needed, shall we combine it with ( SOAP/HTTP + WSDL)?
What would be the role of JAX-WS in this combination?
JAX-WS can implement SOAP/HTTP based webservice. USing JAX WS, you can generate WSDL which will describe your defined service implementation.
Could it be replaced by JAX-RPC (or by something else)?
yes, JAW-RS would also work.
Is JAX-WS cross-platform or only specific to Java?
JAX_WS is only specific to java. But you can design/implement webservice using JAX-ws which would be cross-platform.
If moving to another platform, such as C or C++ or Python, would we be able to use JAX-WS if needed to be combined?
You can use jax ws implemented webservice provider to interact with any other language based webservice client.
Talking C#,.Net... Is JAX-WS similar to WCF?
JAX-WS, WCF both are framewrok to implement webservice in java, .net respectively.
Note: You are quite confused between language, framework, protocol, implementation methods etc. Your questions are very ambiguous. Keep Learning.

Related

How to implement SOAP Endpoints that receive SOAP XML (SAAJ?) Instead of generated objects using CXF

We have currently implemented SOAP endpoints with CXF (Spring Boot). In accordance with the contract-first approach, we provide a WSDL, generate Java objects, and services from it (cxf-codegen-plugin) and finally implement the service interface.
This is all very nice and simple, but we only need the SOAP XML or the corresponding DOM tree. Not only is the conversion to Java objects unnecessary, we also have to convert them back to XML and lose some information from the original XML.
As far as I understand is SAAJ (SOAP with Attachments API for Java) exactly right here, or am I missing something? At most all resources about SAAJ are quite old and "low level". I cannot find good resources for that kind of approach.
In addition, we want to implement new services as microservices soon and are currently reviewing Quarkus and Apache Camel. However, I cannot find a (simple) way to create corresponding endpoints from the WSDLs, via which we then receive the SOAP message as plain XML / DOM tree.
In jax-ws, message-level access can be accomplished on the server side using web service Provider-based endpoints, and on the client side using Dispatch clients.
A web service Provider-based endpoint offers a dynamic alternative to the Java service endpoint interface (SEI)-based endpoint. Unlike the SEI-based endpoint that abstracts the details of converting between Java objects and their XML representation, the Provider interface enables you to access the content directly at the XML message level—without the JAXB binding. web service Provider-based endpoints can be implemented synchronously or asynchronously using the javax.xml.ws.Provider or com.sun.xml.ws.api.server.AsyncProvider interfaces, respectively.
See https://cxf.apache.org/docs/provider-services.html for details

How to expose EJB JAX-WS web method to receive object of commonj.SDO DataObject type

I'm almost new to web services in Java.
Our company has previously used IBM Process Server to handle the interactions between SCA objects. Due to some reasons we've decided to give up IBM Process Server and therefore we started to migrate our current integrations to EJB.
Just to make myself more clear I've attached a simple schema describing my current task. This is a process deployed at IBM Process Server:
I need to develop an EJB, which also acts as a JAX-WS web service and receives an SDO DataObject from the JAX-WS client service, then makes some additional logic and sends the SOAP-request to another web service.
I'm totally don't know how to make my EJB receive a DataObject via SOAP. I have a WSDL-file, describing SOAP request and response formats.
I also found an article, describing the way to solve this using IBM RAD JAX-RPC webservice from a WSDL with an SDO facade, but the article seems to be outdated.
Is there any way to create the service without using JAXB-bounded POJOs, but with SDO? In case of no, how to handle it using JAXB in a proper way? Thanks in advance.
Solved!
During my searchings I figured out, that it's neccessary to generate a bean skeleton, change all the web methods signatures to receive and return JAXB-binded POJOs, generated from WSDL and then transforming it to Data Objects if needed.
JAXB takes care of the all marshalling/unmarshalling staff. I just needed to RTFM a little bit.

REST WADL vs SOAP

I saw these two links:
1.SOAP vs REST
SOAP vs REST 2
I understood the difference between the two. But I also heard about WADL (https://wadl.java.net/), which are used along with REST to provide a contract ( similar to SOAP WSDL does)
Now I have two questions:
REST is also adheres to the data type that is going to receive or transmit by WADL, which now acts very similar to SOAP ( with WSDL ).
If REST with WADL and SOAP are similar, which one to use?
Thanks in advance.
SOAP (Simple Object Access Protocol)
REST (Representation State Transfer)
SOAP and REST can’t be compared directly, since the first is a protocol and the second is an architectural style.
The main difference between SOAP and REST is the degree of coupling between client and server implementations. SOAP works like a custom desktop application, tightly coupled to server. There is rigid contract between client and server and everything seem like breaking is any of the side is changed. But, REST client is more like a browser. It’s a generic client that knows how to use a protocol and standardized methods. If done right, there would be less coupling.
A client is supposed to enter into REST without prior knowledge of the API, except for the entry point and the media type. In SOAP, the clients need to have the prior knowledge of everything it will be using.
REST is protocol independent. It’s not coupled to HTTP. We can use it for any protocol for which there is standardized URI scheme. But, SOAP itself is a protocol.
SOAP only supports XML, but REST supports different format like text, JSON, XML etc. And we know if we use JSON then definitely we will be in better place in terms of payload.
SOAP can use any generic transport (HTTP / HTTPS) or RPC (Remote Procedural Call). But, REST uses only HTTP/HTTPS
SOAP can’t use REST. But, REST can use SOAP similar to HTTP or any other protocols
SOAP used services interfaces to expose the business logic. REST used URI to expose the business logic
In Java, JAX-WS is for SOAP web services. But, Java JAX-RS is for REST web services
SOAP defines the standards to be strictly followed. REST doesn’t define any standards like SOAP
SOAP requires more bandwidth and resource than REST. REST required less bandwidth and resources.
SOAP defines its own security. REST inherits security measures from underlying transport
SOAP is less preferred these days as compared to REST
RESTful and SOAP WebServices are fundamentally different.
In short - SOAP is a typical RPC based call where you hide your request action and details within the XML document of the SOAP body. Wheras pure RESTful webservie totally rely on HTTP methods to perform an action on server.
Although WADL is not yet widely adopted and not really a standard but the theory behind it is to simply help tools to generate some code, and it aims to promote reuse of applications beyond the basic use in a web browser i.e. machine-to-machine communication (still using HTTP protocol).

Understanding the java soap stack - jaxb, jax-*, cfx, etc

Not having done any modern java in a while I am a bit overwhelmed by the plethora of acronyms around providing a soap service. Can you help me summarize what the following technologies are and how they relate to each other. Some of them are obvious but I am adding them to complete the picture:
XML
SOAP
HTTP/TCP (think transports)
XSD
WSDL
JAXB
JAX-WS, JAX-RS, etc.
CFX
Let me know if I've missed something important from the list that I need to add.
XML should be one of the obvious ones
SOAP is a protocol for creating remote procedure calls (web services)
HTTP/TCP transport protocols
XSD XML Schema Definition, defines the data types of your XML documents, useful for Schema validation and parsing to Java objects
WSDL web service definition language, a descriptor for SOAP based web services. Contains the operations you can call and the data (using XSD) to use. The WSDL puts it all together.
JAXB API for binding XML and Java types, so you can parse XML files to Java objects and vice versa
JAX-WS API for SOAP based web services
JAX-RS API for RESTful web services (alternative to SOAP)
CFX is a framework from Apache for web services. All other technologies above are just APIs / standards, CFX is an implementation of these.
XML
markup language favoured by SOAP webservices. You should be considering whether JSON meets your needs
SOAP
Used to mean Simplified Object Appliction Protocol, but really now means 'non-RESTful' web services
HTTP/TCP (think transports)
Webservices tend to use HTTP, but don't have to. Benefit of HTTP is ubiquity / firewall punching (via proxies)
XSD
XML schema Definition - a 'better' validation framework for XML than DOCTYPE. This is arguable. XSD is overly heavyweight for many applications
WSDL
Web Service Description Language - defines the methods/parameters of SOAP based webservices. Arguably too heavyweight for many applications
JAXB
Java XML Binding - allows XML <-> Java object <-> XML roundtripping. Can be difficult to work with for non-trivial examples
JAX-WS, JAX-RS, etc.
JAX-WS is the (large) family of webservice standards around SOAP
JAX-RS is the API for RESTful webservices.
CFX
???
REST
An alternative to SOAP webservices based on Roy Fieldings paper. Often considered simpler than SOAP and easier to use. But care is needed to implement correctly, Noteably HATEOAS (Hypertext As The Engine Of Application State) is often misunderstood.
JSON
Javascript Object Notation - an alternative data representation to XML based on Javascript data literals

Spring WS Client - How to create mapping POJO for WSDLs without using Axis

I'm creating a Spring WS client. I have a huge WSDL from a third-party company. They provide a set of classes that maps to their WSDL via the Axis' WSDL2Java. I don't want to use Axis or any dependencies from them.
Since this is a web service client, I'm free to choose any framework. My problem is how do I generate a mapping class for the WSDL without using Axis's WSDL2Java. Am I stuck with manipulating pure XML? Take note I'm using Spring WS.
Edit:
Is it true if the service provider has built their service with Axis 1, you're basically stuck with making a client that's also based on Axis 1? I read it from this answer JAX-WS client with Axis service. I thought web services are supposed to be decoupled or at least independent from the platform that it was created, allowing you to have a .Net based web service to be accessed from a Java based client and vice versa?
If you want to use Spring-WS, then your best bet is to use the wsimport tool that ships with Java 6 (or use the JAX-WS RI, if you're on Java5). This will generate JAX-WS stubs for the web service. Included in these stubs will be standard JAXB bindings for the WSDL's schema, and those can be used with Spring-WS (wsimport will generate other service stubs that you won't need for Spring-WS).
If you are only interested in generating the POJOs from the WSDL, I think you could just get the XSD from the WSDL and use XJC tool to generate only the JAXB beans. This would avoid generating useless JAX-WS stubs.

Categories

Resources