On 10/18/07, Ana Belén Antón Gironés <[EMAIL PROTECTED]> 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