users@jax-ws.java.net

Re: Annotaion help for newbe pls

From: Doug Kohlert <Doug.Kohlert_at_Sun.COM>
Date: Thu, 23 Feb 2006 08:33:56 -0800

FYI, JAX-WS 2.0 now supports ArrayList<xxxx> when using the default
doc/lit wrapped mode.

Steve wrote:

> The question is answered here:
> http://forum.java.sun.com/thread.jspa?threadID=709803&tstart=0
>
> ArrayList<ImageNode> as a return type doesn't seem to work in my case,
> if you use a normal array ImageNode[] as
> the return type it actually works.
>
> cheers
> Steve
>
> Steve wrote:
>
>> Hi there,
>>
>> I just started using Jax-WS 2.0 a couple of days ago and was pretty
>> happy with my first test, I
>> managed to send an Image object to the web-service and get a List of
>> Images back (actually a List of byte[] which I reencoded to the images).
>> I didn't have to use annotations so far (besides the @Webservice in
>> my server class) because JAX-WS 2.0 seems to handle basic Java data
>> types by its own.
>>
>> Now I have to send my own data types over the wire via the webservice
>> and get a
>> javax.xml.ws.soap.SOAPFaultException: Internal server error
>> when I try to return my self-defined class.
>>
>> Here my Web-service server class:
>>
>> package application.webservice.server;
>>
>> import java.awt.Image;
>> import java.util.ArrayList;
>>
>> import javax.jws.WebService;
>>
>> import application.webservice.server.logic.ImageComparer;
>> import application.webservice.server.logic.ImageNode;
>>
>> @WebService
>> public class ImageFinderJAXWS {
>>
>> public ArrayList<ImageNode> findImages(Image queryImage, String[]
>> selectedImagePaths,
>> int numberOfImagesToReturn){
>> ArrayList<ImageNode> responseImageList = new
>> ArrayList<ImageNode>();
>> ImageComparer imageComparer = new
>> ImageComparer(queryImage,selectedImagePaths);
>> responseImageList =
>> imageComparer.getSimilarImages(numberOfImagesToReturn);
>> return responseImageList;
>> }
>> }
>>
>> This is my client class:
>>
>> public ArrayList<ImageNode> getImages(Image queryImage, String[]
>> selectedImagePaths,
>> int numberOfImagesToReturn){
>> connectToService();
>> ArrayList<byte[]> byteArrayList = new ArrayList<byte[]>();
>> ArrayList<ImageNode> imageNodeList = new ArrayList<ImageNode>();
>> ArrayList<String> selectedImagePathsList = new
>> ArrayList<String>();
>> //encode the image to a byte array for the web-service
>> byte[] queryImageByteArray =
>> RGBUtils.getImageByteArray(queryImage);
>> //put all Strings into an ArrayList of Strings for the
>> web-service
>> for(String path : selectedImagePaths ){
>> selectedImagePathsList.add(path);
>> }
>> Iterator imageNodeIterator =
>> port.findImages(queryImageByteArray, selectedImagePathsList,
>> numberOfImagesToReturn).iterator();
>> while(imageNodeIterator.hasNext()){
>> imageNodeList.add((ImageNode)imageNodeIterator.next());
>> }
>>
>> return imageNodeList;
>> }
>>
>> The port.findImages(queryImageByteArray, selectedImagePathsList,
>> numberOfImagesToReturn) call throws the internal server
>> error exception.
>> From what I read in the JAXB 2.0 /JAX-WS 2.0 forum and this mailing
>> list so far, I believe I have to add annotations
>> to my ImageNode class so that it can be marshalled and unmarshalled.
>>
>> Here is my ImageNode Class:
>>
>> public class ImageNode implements Comparable{
>>
>> private Image image = null;
>> private String imagePath = null;
>> private double distance = 0.0;
>> public ImageNode(){
>> }
>> public ImageNode(Image image, double distance, String imagePath){
>> this.image = image;
>> this.distance = distance;
>> this.imagePath = imagePath;
>> }
>> /* (non-Javadoc)
>> * @see java.lang.Comparable#compareTo(T)
>> */
>> public int compareTo(Object o) {
>> int result = 0;
>> if (o != null){
>> ImageNode in2 = (ImageNode)o;
>> if (this.distance > in2.getDistance()) result =1;
>> else if (this.distance < in2.getDistance()) result = -1;
>> else if (this.distance == in2.getDistance()) result = 0;
>> }
>> else{
>> throw new NullPointerException();
>> }
>> return result;
>> }
>>
>> public double getDistance() {
>> return distance;
>> }
>>
>> public void setDistance(double distance) {
>> this.distance = distance;
>> }
>>
>> public Image getImage() {
>> return image;
>> }
>>
>> public void setImage(Image image) {
>> this.image = image;
>> }
>>
>> public String getImagePath() {
>> return imagePath;
>> }
>>
>> public void setImagePath(String imagePath) {
>> this.imagePath = imagePath;
>> }
>>
>> }
>>
>> Can somebody please give me a short introduction what I would have to
>> annotate or point me to a tutorial / example.
>> Where and how would I use a Marshaller/Unmarshaller ? I think it's
>> quite important to add an example like this one to
>> the JAX-WS 2.0 samples folder (I hope I didn't overlook it) because
>> all examples only show simple Java data types but
>> no user data types.
>>
>> Thanks a lot for your help.
>>
>> Regards,
>> Steve
>>
>

-- 
 - Doug