You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@tuscany.apache.org by Ana Belén Antón Gironés <ba...@grupoetra.com> on 2007/10/18 11:25:55 UTC

Using Java Beans with Tuscany

Dear Simon,

First of all, my latter problem (regarding "No service invoker is available
for reference default" error)  was saved. I think dependencies wasn't
causing this problem. Certainly, I use another dependencies, but I had
followed your steps and it was right. I think the problem was with the
composite file: the component name it was wrong. Thank you very much.

Now, it seems I have a problem with the JavaBeans, I think:

============================================================================
============================

Starting ...
InformationService.composite ready
Exception in thread "main" java.lang.IllegalArgumentException: Pass-by-value
is not supported for the given object
 at
org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding.copy(JavaB
eansDataBinding.java:84)
 at
org.apache.tuscany.sca.databinding.DefaultDataBindingExtensionPoint$LazyData
Binding.copy(DefaultDataBindingExtensionPoint.java:171)
 at
org.apache.tuscany.sca.core.databinding.wire.PassByValueInteceptor.copy(Pass
ByValueInteceptor.java:90)
 at
org.apache.tuscany.sca.core.databinding.wire.PassByValueInteceptor.invoke(Pa
ssByValueInteceptor.java:54)
 at
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvoca
tionHandler.java:233)
 at
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvoca
tionHandler.java:130)
 at $Proxy5.getInformationObject(Unknown Source)
 at Client.isClient.main(igsClient.java:21)
Caused by: java.io.NotSerializableException:
eu.services.information.repository.Repository
 at java.io.ObjectOutputStream.writeObject0(Unknown Source)
 at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
 at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
 at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
 at java.io.ObjectOutputStream.writeObject0(Unknown Source)
 at java.io.ObjectOutputStream.writeObject(Unknown Source)
 at
org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding.copy(JavaB
eansDataBinding.java:68)
 ... 7 more

============================================================================
==============================

 If you remember I had this java class:

InformationServiceImpl.java
====================
package eu.services.information.rh;

import org.osoa.sca.annotations.Service; import
eu.services.information.exceptions.*;
import eu.services.information.io.InformationObject;
import eu.services.information.is.*;

@Service(InformationService.class)
public class InformationServiceImpl implements InformationService{

//--------------------------------------------------------------------------
--------------------------------
 public InformationObject getInformationObject(String id) throws
ISNotFoundException{
 InformationObject io = null;  
 try {
   io = new InformationObject();
   io.setID(id);
 } catch (MalformedURLException e) {
  e.printStackTrace();
 } catch (ISNotFoundException e) {
   io = null;
   throw new ISNotFoundException("Information Object with id ["+
     id+"] doesn't exist");
  }
 return io;  
 }

}

The method getInformationObject return an "InformationObject" given by its
"id". For that I use a JavaBean. Please, note that I have added some of code
to this method because of that. The InformationObject,java is the following:

InformationObjectImpl.java
===================
package eu.services.information.rh;

import java.io.Serializable;
import eu.services.information.io.InformationObject;
import eu.services.information.repository.Repository;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;

public class InformationObjectImpl implements InformationObject,
Serializable {
    private String Text = null;
    private String ID = null;
    
    private Repository repository = null;
    
    public InformationObjectImpl() {
    }
     
    public String getText(){
        return this.Text;
    }
    
    public String getId(){
        return this.ID;
    }
    
    private void setDescription(Document document) {
  this.Description = repository.getUniqueValue(Repository.PATH_TEXT,
document);
  }
  
  private void setID(Document document) {
  this.ID = repository.getUniqueValue(Repository.PATH_ID, document);
  }
 
  public void setID(String id)  {   
   repository= new Repository();
   Node myNode = repository.getUniqueRegister(Repository.PATH_ID, id); 
   if (gsNode!= null) {
    Document myDocument = DocumentHelper.parseText(myNode.asXML());
    setText(myDocument);
    setID(myDocument);
   }
 }
}

Repository.java
===============
package eu.services.information.repository;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class Repository {

 private String Repository_FILE = "Repository.xml"; 
 private Document myrepository = null;

 
//--------------------------------------------------------------------------
----------------------------------------------
 // --> Paths
 
//--------------------------------------------------------------------------
----------------------------------------------
 public final static String PATH_RELATIVE_TEST = "//test";
 public final static String PATH_ID    = "//id";
 private final static String NAME_REGISTER = "Register";
 
//--------------------------------------------------------------------------
----------------------------------------------
 // --> /Paths
 
//--------------------------------------------------------------------------
----------------------------------------------
   
 public Repository () throws DocumentException{
  SAXReader xmlReader = new SAXReader();
  repository = xmlReader.read(new File(getPath()));
 }
 
 public Document readRepository(){
  return this.myrepository;
 }
 
 public String getPath(){
  String path = ClassLoader.getSystemResource(Repository_FILE).getPath();
  path=path.replace("%20"," ");
  return path;
 }
 
 public boolean existRepository(){
  if (this.myrepository != null) return true;
  else return false;
 }
 
 public String getUniqueValue(String path, Document register){
  String value = null;
   List nodesList = register.selectNodes(path);
    if (nodesList.size()!= 0 ){
     Iterator iterator = nodesList.iterator();       
       while(iterator.hasNext()){     
         Element element = (Element)iterator.next();
         value = element.getText();
       }
    }
    return value;
 }
}
public Node getUniqueRegister(String path, String value){
  Node registerFound = null;
  int index = -1;
  boolean found = false;
  
        List nodesList = myrepository.selectNodes(path);
        if (nodesList.size()!= 0 ){
         Iterator iterator = nodesList.iterator();       
         while(iterator.hasNext() & !found){     
          Element element = (Element)iterator.next();
          index++;
          if (element.getText().equals(value)){
           found = true;
           //If some one is found, the node parent is searched until find
the register parent...
           Node nodeFound = (Node)nodesList.get(index);
           while (nodeFound.getName()!=NAME_REGISTER){
            nodeFound = nodeFound.getParent();
           }
           registerFound = nodeFound;
          }
         }
        }
        return registerFound;
 }
}

Do you have any idea about what I am using in wrong way?

Thanks and best regards,

Ana Belen


RE: Using Java Beans with Tuscany

Posted by Ana Belén Antón Gironés <ba...@grupoetra.com>.
Sorry for my ignorance. Thank you very much!!!

Ana Belen 

-----Mensaje original-----
De: Ana Belén Antón Gironés [mailto:banton.etra-id@grupoetra.com] 
Enviado el: jueves, 18 de octubre de 2007 11:26
Para: tuscany-user@ws.apache.org
Asunto: Using Java Beans with Tuscany

Dear Simon,

First of all, my latter problem (regarding "No service invoker is available
for reference default" error)  was saved. I think dependencies wasn't
causing this problem. Certainly, I use another dependencies, but I had
followed your steps and it was right. I think the problem was with the
composite file: the component name it was wrong. Thank you very much.

Now, it seems I have a problem with the JavaBeans, I think:

============================================================================
============================

Starting ...
InformationService.composite ready
Exception in thread "main" java.lang.IllegalArgumentException: Pass-by-value
is not supported for the given object  at
org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding.copy(JavaB
eansDataBinding.java:84)
 at
org.apache.tuscany.sca.databinding.DefaultDataBindingExtensionPoint$LazyData
Binding.copy(DefaultDataBindingExtensionPoint.java:171)
 at
org.apache.tuscany.sca.core.databinding.wire.PassByValueInteceptor.copy(Pass
ByValueInteceptor.java:90)
 at
org.apache.tuscany.sca.core.databinding.wire.PassByValueInteceptor.invoke(Pa
ssByValueInteceptor.java:54)
 at
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvoca
tionHandler.java:233)
 at
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvoca
tionHandler.java:130)
 at $Proxy5.getInformationObject(Unknown Source)  at
Client.isClient.main(igsClient.java:21)
Caused by: java.io.NotSerializableException:
eu.services.information.repository.Repository
 at java.io.ObjectOutputStream.writeObject0(Unknown Source)  at
java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)  at
java.io.ObjectOutputStream.writeSerialData(Unknown Source)  at
java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)  at
java.io.ObjectOutputStream.writeObject0(Unknown Source)  at
java.io.ObjectOutputStream.writeObject(Unknown Source)  at
org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding.copy(JavaB
eansDataBinding.java:68)
 ... 7 more

============================================================================
==============================

 If you remember I had this java class:

InformationServiceImpl.java
====================
package eu.services.information.rh;

import org.osoa.sca.annotations.Service; import
eu.services.information.exceptions.*;
import eu.services.information.io.InformationObject;
import eu.services.information.is.*;

@Service(InformationService.class)
public class InformationServiceImpl implements InformationService{

//--------------------------------------------------------------------------
--------------------------------
 public InformationObject getInformationObject(String id) throws
ISNotFoundException{  InformationObject io = null;  try {
   io = new InformationObject();
   io.setID(id);
 } catch (MalformedURLException e) {
  e.printStackTrace();
 } catch (ISNotFoundException e) {
   io = null;
   throw new ISNotFoundException("Information Object with id ["+
     id+"] doesn't exist");
  }
 return io;
 }

}

The method getInformationObject return an "InformationObject" given by its
"id". For that I use a JavaBean. Please, note that I have added some of code
to this method because of that. The InformationObject,java is the following:

InformationObjectImpl.java
===================
package eu.services.information.rh;

import java.io.Serializable;
import eu.services.information.io.InformationObject;
import eu.services.information.repository.Repository;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;

public class InformationObjectImpl implements InformationObject,
Serializable {
    private String Text = null;
    private String ID = null;
    
    private Repository repository = null;
    
    public InformationObjectImpl() {
    }
     
    public String getText(){
        return this.Text;
    }
    
    public String getId(){
        return this.ID;
    }
    
    private void setDescription(Document document) {
  this.Description = repository.getUniqueValue(Repository.PATH_TEXT,
document);
  }
  
  private void setID(Document document) {
  this.ID = repository.getUniqueValue(Repository.PATH_ID, document);
  }
 
  public void setID(String id)  {   
   repository= new Repository();
   Node myNode = repository.getUniqueRegister(Repository.PATH_ID, id); 
   if (gsNode!= null) {
    Document myDocument = DocumentHelper.parseText(myNode.asXML());
    setText(myDocument);
    setID(myDocument);
   }
 }
}

Repository.java
===============
package eu.services.information.repository;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class Repository {

 private String Repository_FILE = "Repository.xml";  private Document
myrepository = null;

 
//--------------------------------------------------------------------------
----------------------------------------------
 // --> Paths
 
//--------------------------------------------------------------------------
----------------------------------------------
 public final static String PATH_RELATIVE_TEST = "//test";
 public final static String PATH_ID    = "//id";
 private final static String NAME_REGISTER = "Register";
 
//--------------------------------------------------------------------------
----------------------------------------------
 // --> /Paths
 
//--------------------------------------------------------------------------
----------------------------------------------
   
 public Repository () throws DocumentException{
  SAXReader xmlReader = new SAXReader();
  repository = xmlReader.read(new File(getPath()));  }
 
 public Document readRepository(){
  return this.myrepository;
 }
 
 public String getPath(){
  String path = ClassLoader.getSystemResource(Repository_FILE).getPath();
  path=path.replace("%20"," ");
  return path;
 }
 
 public boolean existRepository(){
  if (this.myrepository != null) return true;
  else return false;
 }
 
 public String getUniqueValue(String path, Document register){
  String value = null;
   List nodesList = register.selectNodes(path);
    if (nodesList.size()!= 0 ){
     Iterator iterator = nodesList.iterator();       
       while(iterator.hasNext()){     
         Element element = (Element)iterator.next();
         value = element.getText();
       }
    }
    return value;
 }
}
public Node getUniqueRegister(String path, String value){
  Node registerFound = null;
  int index = -1;
  boolean found = false;
  
        List nodesList = myrepository.selectNodes(path);
        if (nodesList.size()!= 0 ){
         Iterator iterator = nodesList.iterator();       
         while(iterator.hasNext() & !found){     
          Element element = (Element)iterator.next();
          index++;
          if (element.getText().equals(value)){
           found = true;
           //If some one is found, the node parent is searched until find
the register parent...
           Node nodeFound = (Node)nodesList.get(index);
           while (nodeFound.getName()!=NAME_REGISTER){
            nodeFound = nodeFound.getParent();
           }
           registerFound = nodeFound;
          }
         }
        }
        return registerFound;
 }
}

Do you have any idea about what I am using in wrong way?

Thanks and best regards,

Ana Belen




---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-user-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-user-help@ws.apache.org


Re: Using Java Beans with Tuscany

Posted by Simon Laws <si...@googlemail.com>.
On 10/18/07, Ana Belén Antón Gironés <ba...@grupoetra.com> wrote:
>
> Dear Simon,
>
> First of all, my latter problem (regarding "No service invoker is
> available
> for reference default" error)  was saved. I think dependencies wasn't
> causing this problem. Certainly, I use another dependencies, but I had
> followed your steps and it was right. I think the problem was with the
> composite file: the component name it was wrong. Thank you very much.
>
> Now, it seems I have a problem with the JavaBeans, I think:
>
>
> ============================================================================
> ============================
>
> Starting ...
> InformationService.composite ready
> Exception in thread "main" java.lang.IllegalArgumentException:
> Pass-by-value
> is not supported for the given object
> at
> org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding.copy
> (JavaB
> eansDataBinding.java:84)
> at
>
> org.apache.tuscany.sca.databinding.DefaultDataBindingExtensionPoint$LazyData
> Binding.copy(DefaultDataBindingExtensionPoint.java:171)
> at
> org.apache.tuscany.sca.core.databinding.wire.PassByValueInteceptor.copy
> (Pass
> ByValueInteceptor.java:90)
> at
> org.apache.tuscany.sca.core.databinding.wire.PassByValueInteceptor.invoke
> (Pa
> ssByValueInteceptor.java:54)
> at
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke
> (JDKInvoca
> tionHandler.java:233)
> at
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke
> (JDKInvoca
> tionHandler.java:130)
> at $Proxy5.getInformationObject(Unknown Source)
> at Client.isClient.main(igsClient.java:21)
> Caused by: java.io.NotSerializableException:
> eu.services.information.repository.Repository
> at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
> at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> at java.io.ObjectOutputStream.writeObject(Unknown Source)
> at
> org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding.copy
> (JavaB
> eansDataBinding.java:68)
> ... 7 more
>
>
> ============================================================================
> ==============================
>
> If you remember I had this java class:
>
> InformationServiceImpl.java
> ====================
> package eu.services.information.rh;
>
> import org.osoa.sca.annotations.Service; import
> eu.services.information.exceptions.*;
> import eu.services.information.io.InformationObject;
> import eu.services.information.is.*;
>
> @Service(InformationService.class)
> public class InformationServiceImpl implements InformationService{
>
>
> //--------------------------------------------------------------------------
> --------------------------------
> public InformationObject getInformationObject(String id) throws
> ISNotFoundException{
> InformationObject io = null;
> try {
>    io = new InformationObject();
>    io.setID(id);
> } catch (MalformedURLException e) {
>   e.printStackTrace();
> } catch (ISNotFoundException e) {
>    io = null;
>    throw new ISNotFoundException("Information Object with id ["+
>      id+"] doesn't exist");
>   }
> return io;
> }
>
> }
>
> The method getInformationObject return an "InformationObject" given by its
> "id". For that I use a JavaBean. Please, note that I have added some of
> code
> to this method because of that. The InformationObject,java is the
> following:
>
> InformationObjectImpl.java
> ===================
> package eu.services.information.rh;
>
> import java.io.Serializable;
> import eu.services.information.io.InformationObject;
> import eu.services.information.repository.Repository;
> import org.dom4j.Document;
> import org.dom4j.DocumentException;
> import org.dom4j.DocumentHelper;
> import org.dom4j.Node;
>
> public class InformationObjectImpl implements InformationObject,
> Serializable {
>     private String Text = null;
>     private String ID = null;
>
>     private Repository repository = null;
>
>     public InformationObjectImpl() {
>     }
>
>     public String getText(){
>         return this.Text;
>     }
>
>     public String getId(){
>         return this.ID;
>     }
>
>     private void setDescription(Document document) {
>   this.Description = repository.getUniqueValue(Repository.PATH_TEXT,
> document);
>   }
>
>   private void setID(Document document) {
>   this.ID = repository.getUniqueValue(Repository.PATH_ID, document);
>   }
>
>   public void setID(String id)  {
>    repository= new Repository();
>    Node myNode = repository.getUniqueRegister(Repository.PATH_ID, id);
>    if (gsNode!= null) {
>     Document myDocument = DocumentHelper.parseText(myNode.asXML());
>     setText(myDocument);
>     setID(myDocument);
>    }
> }
> }
>
> Repository.java
> ===============
> package eu.services.information.repository;
>
> import org.dom4j.Attribute;
> import org.dom4j.Document;
> import org.dom4j.DocumentException;
> import org.dom4j.DocumentFactory;
> import org.dom4j.Element;
> import org.dom4j.Node;
> import org.dom4j.io.SAXReader;
>
> public class Repository {
>
> private String Repository_FILE = "Repository.xml";
> private Document myrepository = null;
>
>
>
> //--------------------------------------------------------------------------
> ----------------------------------------------
> // --> Paths
>
>
> //--------------------------------------------------------------------------
> ----------------------------------------------
> public final static String PATH_RELATIVE_TEST = "//test";
> public final static String PATH_ID    = "//id";
> private final static String NAME_REGISTER = "Register";
>
>
> //--------------------------------------------------------------------------
> ----------------------------------------------
> // --> /Paths
>
>
> //--------------------------------------------------------------------------
> ----------------------------------------------
>
> public Repository () throws DocumentException{
>   SAXReader xmlReader = new SAXReader();
>   repository = xmlReader.read(new File(getPath()));
> }
>
> public Document readRepository(){
>   return this.myrepository;
> }
>
> public String getPath(){
>   String path = ClassLoader.getSystemResource(Repository_FILE).getPath();
>   path=path.replace("%20"," ");
>   return path;
> }
>
> public boolean existRepository(){
>   if (this.myrepository != null) return true;
>   else return false;
> }
>
> public String getUniqueValue(String path, Document register){
>   String value = null;
>    List nodesList = register.selectNodes(path);
>     if (nodesList.size()!= 0 ){
>      Iterator iterator = nodesList.iterator();
>        while(iterator.hasNext()){
>          Element element = (Element)iterator.next();
>          value = element.getText();
>        }
>     }
>     return value;
> }
> }
> public Node getUniqueRegister(String path, String value){
>   Node registerFound = null;
>   int index = -1;
>   boolean found = false;
>
>         List nodesList = myrepository.selectNodes(path);
>         if (nodesList.size()!= 0 ){
>          Iterator iterator = nodesList.iterator();
>          while(iterator.hasNext() & !found){
>           Element element = (Element)iterator.next();
>           index++;
>           if (element.getText().equals(value)){
>            found = true;
>            //If some one is found, the node parent is searched until find
> the register parent...
>            Node nodeFound = (Node)nodesList.get(index);
>            while (nodeFound.getName()!=NAME_REGISTER){
>             nodeFound = nodeFound.getParent();
>            }
>            registerFound = nodeFound;
>           }
>          }
>         }
>         return registerFound;
> }
> }
>
> Do you have any idea about what I am using in wrong way?
>
> Thanks and best regards,
>
> Ana Belen
>
> Hi Ana Belen

The cause of the error seems to be:

Caused by: java.io.NotSerializableException:
eu.services.information.repository.Repository

Looking at the Repository implementation it isn't marked as serializable so
Tuscany can't use pass it by value. You either need to make this type
serializable or construct an InformationObject implementation that doesn't
include the Repository.

Regards

Simon