What is the difference between SEI and WSDL - web-services

I am trying to learn webservices using j2ee. I am not able to completely understand the difference between a WSDL and a Service Endpoint Interface. What is the purpose of each and are both of these auto generated?

WSDL is super set :
XML-based interface description language
SEI is one of element in WSDL : A collection of operation elements describing the logical interface of a service(defines the methods to be exposed as a Web service).
This picture tells relationship between SEI and WSDL.
bottom side red box in WSDL 2.0 (in the WSDL 1.x interface was called portType)
Reason to compile to class.
Java did not recognize XML file.
It needs to convert to Java class object by Jaxb unmarshaling (opposite direction called marshaling)
References :
Web Services Description Language
introduction-to-jaxb
Introducing WSDL Contracts

Related

what difficulty would be there if WSDL hadn't existed?

I have searched for use of WSDL, but I am not able to fully comprehend what would happen if WSDL hadn't existed.
A example explaining the scenario would be nice.
Thank you.
THe WSDL is the "contract" which describe the objet use to call or response a WS and the service and operation expose.
In SOAP architecture, if you don't have this you d'ont know how to dialogue with the WS.
Additionnaly, in many language, it used to generate class that represent the objet.
there is plugin for maven or graddle for example.

Spring bean as Web Service

Am new to web services. I have a spring bean in which i have used Transactional annotation for DB operations.
Now I need to expose one of the method in the bean as a service.
The method parameters are Hashmap and a POJO (like JPA entity) object. return type is HashMap.
What is the best way to implement it.
Directly exposing the bean using Axis2.
Using Spring-Ws with CXF.
Writing a new method in a new wrapper class which accepts Strings as parameters.
(These string are actually as required by the original Map and POJO ).
And by setting these strings as properties and objects in POJO and Map respectively, as required by original method.
The Third method wont work in my case as the Map will contains several arraylists which needs to be stored in DB.So I have to use Map only.
Shall I go with SOAP or RESt.
Already two web services were provided using Axis2 in our project by old team.
We are using spring 3 (as core container and for ORM), Hibernate template, Tomcat 6.
Well, that question is best answered by yourself. We can only give hints here which framework and technology might work out best for you. In order to give any hint, we'd need some more information about your project.
SOAP and REST, for example, are two essentially different technologies. The SOAP protocol must use XML as information medium and can use literally any transport medium, e.g. HTTP, E-Mail, JMS, etc. Using SOAP, the contract, which is the WSDL specification, between a service endpoint and a client is the interface description. The REST protocol can use any information medium, e.g. JSON, XML, YAML, etc., but is limited to the HTTP protocol as transport medium. Here, the HTTP methods like DELETE, GET, POST are the interface description.
You said, you're actually using AXIS2. If your experiences with that framework are good enough, I would recommend to use it further. CXF is simply another Web Service Framework which cannot be used together with Spring-WS (but it can be used with the Spring Framework). Here, I would consider that each framework has its caveats and needs some time to learn.

What is the difference between XSD and WSDL?

What is the difference between an XML Schema and WSDL?
The difference I noticed is that WSDL contains XSD and in WSDL we can declare operations, but not in XSD. Is that correct?
WSDL (Web Services Description Language) describes your service and its operations - what is the service called, which methods does it offer, what kind of in parameters and return values do these methods have?
It's a description of the behavior of the service - it's functionality.
XSD (Xml Schema Definition) describes the static structure of the complex data types being exchanged by those service methods. It describes the types, their fields, any restriction on those fields (like max length or a regex pattern) and so forth.
It's a description of datatypes and thus static properties of the service - it's about data.
XSD defines a schema which is a definition of how an XML document can be structured. You can use it to check that a given XML document is valid and follows the rules you've laid out in the schema.
WSDL is a XML document that describes a web service. It shows which operations are available and how data should be structured to send to those operations.
WSDL documents have an associated XSD that show what is valid to put in a WSDL document.
XSD : XML Schema Definition.
XML : eXtensible Markup Language.
WSDL : Web Service Definition Language.
I am not going to answer in technical terms. I am aiming this explanation at beginners.
It is not easy to communicate between two different applications that are developed using two different technologies. For example, a company in Chicago might develop a web application using Java and another company in New York might develop an application in C# and when these two companies decided to share information then XML comes into picture. It helps to store and transport data between two different applications that are developed using different technologies. Note: It is not limited to a programming language, please do research on the information transportation between two different apps.
XSD is a schema definition. By that what I mean is, it is telling users to develop their XML in such a schema. Please see below images, and please watch closely with "load-on-startup" element and its type which is integer. In the XSD image you can see it is meant to be integer value for the "load-on-startup" and hence when user created his/her XML they passed an int value to that particular element. As a reminder, XSD is a schema and style whereas XML is a form to communicate with another application or system. One has to see XSD and create XML in such a way or else it won't communicate with another application or system which has been developed with a different technology. A company in Chicago provides a XSD template for a company in Texas to write or generate their XML in the given XSD format. If the company in Texas failed to adhere with those rules or schema mentioned in XSD then it is impossible to expect correct information from the company in Chicago. There is so much to do after the above said story, which an amateur or newbie have to know while coding for some thing like I said above. If you really want to know what happens later then it is better to sit with senior software engineers who actually developed web services. Next comes WSDL, please follow the images and try to figure out where the WSDL will fit in.
***************========Below is partial XML image ==========***************
***************========Below is partial XSD image ==========***************
***************========Below is the partial WSDL image =======*************
I had to create a sample WSDL for a web service called Book. Note, it is an XSD but you have to call it WSDL (Web Service Definition Language) because it is very specific for Web Services. The above WSDL (or in other words XSD) is created for a class called Book.java and it has created a SOAP service. How the SOAP web service created it is a different topic. One has to write a Java class and before executing it create as a web service the user has to make sure Axis2 API is installed and Tomcat to host web service is in place.
As a servicer (the one who allows others (clients) to access information or data from their systems ) actually gives the client (the one who needs to use servicer information or data) complete access to data through a Web Service, because no company on the earth willing to expose their Database for outsiders. Like my company, decided to give some information about products via Web Services, hence we had to create XSD template and pass-on to few of our clients who wants to work with us. They have to write some code to make complete use of the given XSD and make Web Service calls to fetch data from servicer and convert data returned into their suitable requirement and then display or publish data or information about the product on their website. A simple example would be FLIGHT Ticket booking. An airline will let third parties to use flight data on their site for ticket sales. But again there is much more to it, it is just not letting third party flight ticket agent to sell tickets, there will be synchronize and security in place. If there is no sync then there is 100 % chances more than 1 customer might buy same flight ticket from various sources.
I am hoping experts will contribute to my answer. It is really hard for newbie or novice to understand XML, XSD and then to work on Web Services.
XSD is to validate the document, and contains metadata about the XML whereas WSDL is to describe the webservice location and operations.
XSD (XML schema definition) defines the element in an XML document. It can be used to verify if the elements in the xml document adheres to the description in which the content is to be placed.
While wsdl is specific type of XML document which describes the web service. WSDL itself adheres to a XSD.
WSDL - It contains the Operation such as Methods which a webservice provides.and these method can accept simple data types such as int,float etc and complex data types such as objects ,vectors, arrays etc. so mapping this to an xml datatype xsd are used. and based upon the xsd an user who wants to acccess webservice from different platform can provide the data appropriately.
Refer : ayazroomy-java.blogspot.com to read about basics of webservice.
If someone is looking for analogy , this answer might be helpful.
WSDL is like 'SHOW TABLE STATUS' command in mysql. It defines all the elements(request type, response type, format of URL to hit request,etc.,) which should be part of XML. By definition I mean:
1) Names of request or response
2) What should be treated as input , what should be treated as output.
XSD is like DESCRIBE command in mysql. It tells what all variables and their types, a request and response contains.
XSD is schema for WSDL file. XSD contain datatypes for WSDL. Element declared in XSD is valid to use in WSDL file.
We can Check WSDL against XSD to check out web service WSDL is valid or not.

Using Biztalk orchestration as a webservice

I published an orchestration in Biztalk as a webservice. Does anyone know how I can use XML serialization or something to load XML from a file and "convert" it to the messagetype the webservice expects? How do people usually use this webservices? I try to avoid using untyped messages since I use both XML and flatfile, and have read that it could mean trouble.
Well, I guess generally the idea of web services is that you add a web reference to them, which would generate a set of proxy classes you could use to interact with the web service.
You don't normally have to worry about serialising xml files to and from the web service formats, the generated code will do it for you.
If you do wish to, however, to work of XML, you could use .net serialisation to deserialise an xml file into the generated proxy type (as well as serialise any response you're getting).
Here's a basic example of how to deserialise xml into a class instance, you can then pass this instance into the method in the generated proxy.
System.Xml.Serialization.XmlSerializer xser = new System.Xml.Serialization.XmlSerializer(typeof(<generated request type here>));
xser.UnknownAttribute += new System.Xml.Serialization.XmlAttributeEventHandler(xser_UnknownAttribute);
xser.UnknownElement += new System.Xml.Serialization.XmlElementEventHandler(xser_UnknownElement);
xser.UnknownNode += new System.Xml.Serialization.XmlNodeEventHandler(xser_UnknownNode);
xser.UnreferencedObject += new System.Xml.Serialization.UnreferencedObjectEventHandler(xser_UnreferencedObject);
<generated request type here> request = (<generated request type here>)xser.Deserialize(<xml stream here>);
I hope that makes sense
You question is bit confusing. You started off with saying you published an orchestration as web service, but raised the question about consuming it.
If you are talking about published web service:
The web service generated by BizTalk Web service Wizard is not different from a web service you would have written in .NET. Based on the message type you orchestration is expecting and how your structured the operation in the wizard. The Wizard would have auto generated a webservice for you with WSDL and schemas (there will be some BizTalk specific bits inside, but you don't need to worry about the implementation).
You consumers (independant of platform) should be able to consume that web service without any major issues.
If you are trying to consume a web service from Orchestration
Have a look at this paper http://msdn.microsoft.com/en-us/library/ms935219(BTS.10).aspx

What is the prefered method for a 'WSDL' for REST webservice?

I have build plenty of SOAP webservices, but am building a REST webservice for a specific project, and I was wondering what people used for a 'WSDL' for REST services or if it is even needed.
You can try Swagger(now OpenAPI) which allows to describe REST services using a JSON open standard.
REST really only uses the HTTP verbs (GET,PUT,POST,DELETE) on a resource. All operations on a resource are supposed to be represented that way. POST is used as a catch all for when you can't express your business logic in a way that fits into the other three. That is why there isn't really a WSDL for a REST service since you only ever have 4 methods on the resource. Note that the Zend Framework REST library isn't really RESTful and is more of a plain old XML (POX) service.
While Sam's correct that RESTful web applications don't need a direct analog to WSDL, there is an XML vocabulary that's useful for describing RESTful web apps: WADL, or Web Application Description Language. At my company we primarily use WADL to define a spec for a given service that we want to build - we don't generally use it programmatically. That said, the WADL home page includes some Java tools for code generation, and Restlet, the Java REST framework, includes a WADL extension for dynamically wiring applications based on WADL and dynamically generating WADL based on a wired application. I'm a fan of WADL, and recommend that you check it out.
Actually it's possible to use WSDL for that but it should be v 2.0 - see "Describe REST Web services with WSDL 2.0" article.
You can supply an XSD if you are using XML in your REST service.
Or just examples of the XML, should be enough to work things out for simple data structures anyway.