// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Camí d'aprenentatge de serveis web
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Camí d'aprenentatge de serveis web - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Camí d'aprenentatge de serveis web


== *Què són els serveis web?*

Els serveis web són components d'aplicació distribuïts que estan disponibles des de l'exterior. Podeu utilitzar-los per a integrar aplicacions d'ordinador que estiguin escrites en llenguatges diferents i executar-les en diferents plataformes. Els serveis web són independents del llenguatges i plataforma, ja que els distribuïdors han estat d'acord en estàndards comuns de serveis web.

Les aplicacions de serveis web estan desplegades en servidors d'aplicacions Java, com GlassFish / Sun Java System Application Server.

Aquesta pàgina proporciona enllaços a diversos documents de NetBeans i a recursos que poden ajudar-vos a aprendre com desenvolupar aplicacions EJB i serveis web amb l'IDE NetBeans.

== Getting Started 

* link:../docs/websvc/intro-ws.html[+Introduction to Web Services +]

== Tutorials and Articles

=== SOAP Web Services

* link:../docs/websvc/jax-ws.html[+Getting Started with JAX-WS Web Services+]
* link:../docs/websvc/client.html[+Developing JAX-WS Web Service Clients+]
* Passing Binary Data in SOAP: A five-part tutorial (EE6 version. See link:../archive/index.html#NetBeans_6.8_Docs_Archives[+NetBeans 6.8 documentation+] for EE5 version.)
** link:../docs/websvc/flower_overview.html[+Part 1: Overview+]
** link:../docs/websvc/flower_ws.html[+Part 2: Creating the Web Service+]
** link:../docs/websvc/flower-code-ws.html[+Part 3: Coding and Testing the Web Service+]
** link:../docs/websvc/flower_wsdl_schema.html[+Part 4: Modifying the Schema and WSDL Files+]
** link:../docs/websvc/flower_swing.html[+Part 5: Creating the Swing Client+]

=== RESTful Web Services

* link:../docs/websvc/rest.html[+Getting Started with RESTful Web Services+]
* link:http://netbeans.dzone.com/nb-generate-simpler-rest[+NetBeans IDE to Generate Simpler RESTful Web Services+]
* link:http://netbeans.dzone.com/nb-smugmug-client[+DZone: SmugMug Client in Java with NetBeans IDE+]
* link:http://netbeans.dzone.com/articles/how-to-combine-rest-and-ejb-31[+DZone: How to Combine REST Services with EJB 3.1+]

=== Software as a Service (SaaS)

* link:../docs/websvc/zillow.html[+SaaS: Zillow+]

=== Web Service Reliability and Security

* link:../docs/websvc/wsit.html[+Advanced Web Service Interoperability+]
* link:http://netbeans.dzone.com/oauth-support-netbeans[+DZone: OAuth Support in NetBeans IDE 6.9+]

== Community-Contributed Docs

* link:http://buttso.blogspot.com/2011/02/using-jax-rs-with-weblogic-server-1034.html[+Steve Button's blog: Using JAX-RS [and NetBeans IDE] With WebLogic Server 10.3.4+]
* link:http://www.adam-bien.com/roller/abien/entry/simplest_possible_ejb_3_13[+Simplest Possible EJB 3.1/REST (JSR 311) Component+], by Adam Bien
* link:http://wiki.netbeans.org/TransformingSOAPMessagesWithXSLT[+Transforming SOAP Messages with XSLT+], by Siegfried Bolz
* link:http://wiki.netbeans.org/JavaClientForDeliciousUsingNetBeans[+Creating a Java Client for del.icio.us RESTful Web Services+], by Amit Kumar Saha
* link:http://wiki.netbeans.org/SOAPclientForOpenCalais[+A SOAP Client for Open Calais+], by Amit Kumar Saha

== Screencasts

* link:../docs/websvc/pet-catalog-screencast.html[+RESTful Web Services Pet Catalog - NetBeans IDE 6.5+]
* java.net: link:http://download.java.net/javaee5/screencasts/metro-nb6/[+Secure and Reliable Web Services using Metro/GlassFish+]
* YouTube: link:http://youtube.com/watch?v=K8OtFD6RLMM[+SOCRADES: Demonstration of Web Services on Sun SPOT Devices+]

== Other Resources

=== FAQs

* link:http://wiki.netbeans.org/NetBeansUserFAQ#section-NetBeansUserFAQ-WebServicesDevelopment[+Web Service Development FAQs+]

=== Tutorials and Other Docs

* link:http://glassfish.dev.java.net/[+Join the GlassFish Community +]
* link:http://www.mysql.com/why-mysql/java/[+MySQL and Java - Resources +]
* link:http://netbeans.dzone.com/articles/portability-and-performance[+Portablility and Performance Improvements in JAX-WS Clients Created With NetBeans IDE 6.7+]
* link:http://java.dzone.com/news/5-techniques-create-web-servic[+5 Techniques for Creating Java Web Services from WSDL+]
* link:http://netbeans.dzone.com/news/spring-framework-support-rest-[+Spring Framework Support in Jersey REST 0.7+]
* link:http://netbeans.dzone.com/news/advanced-web-service-interoper[+Advanced Web Service Interoperability Made Easy+]
* link:http://netbeans.dzone.com/news/getting-started-with-software-[+Getting Started with "Software as a Service"+]

=== Blogs

* link:http://weblogs.java.net/blog/haroldcarr/[+Harold Carr: Enterprise Web Service Interoperability+]
* link:http://www.java.net/blogs/caroljmcdonald/[+Carol McDonald: Java EE+]
* link:http://weblogs.java.net/blog/vivekp/[+Vivek Panday: XML and Web Services+]
* link:http://blogs.oracle.com/sandoz/[+Paul Sandoz: RESTful Web Services+]
* link:http://blogs.oracle.com/geertjan/[+Geertjan Wielenga: NetBeans IDE Platform+]
* link:http://blogs.oracle.com/jrubinoff[+Jeff Rubinoff: Web Services+]
