You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@tuscany.apache.org by Tuscany User <tu...@gmail.com> on 2009/02/13 05:50:37 UTC

IllegalAnnotationsException - exposing soap service

Hi all,
     I was trying a simple calculator soap service and ran into the
following exception. Please suggest on what can be done to overcome this
exception.
SEVERE: Exception thrown was: org.osoa.sca.ServiceRuntimeException:
com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of
IllegalAnnotationExceptions
com.samples.simpleCalculatorSOAP.EmployeeInterface is an interface, and JAXB
can't handle interfaces.
        this problem is related to the following location:
                at com.samples.simpleCalculatorSOAP.EmployeeInterface
                at public com.samples.simpleCalculatorSOAP.EmployeeInterface
com.samples.simpleCalculatorSOAP.Employee1.getEmployeeInterface()
                at com.samples.simpleCalculatorSOAP.Employee1
com.samples.simpleCalculatorSOAP.EmployeeInterface does not have a no-arg
default constructor.
        this problem is related to the following location:
                at com.samples.simpleCalculatorSOAP.EmployeeInterface
                at public com.samples.simpleCalculatorSOAP.EmployeeInterface
com.samples.simpleCalculatorSOAP.Employee1.getEmployeeInterface()
                at com.samples.simpleCalculatorSOAP.Employee1
     The class that is exposed as soap service is as below.
package com.samples.simpleCalculatorSOAP;
import org.osoa.sca.annotations.Remotable;
@Remotable
    public class SimpleCalculatorServiceImpl extends
SimpleCalculatorServiceImplBase {
    public String add(double n1, double n2){
        Double temp = n1+n2;  return temp.toString();
    }
    public String subtract(double n1, double n2){
        Double temp = n1-n2;   return temp.toString();
    }
    public String multiply(double n1, double n2){
        Double temp = n1*n2;  return temp.toString();
    }
    public String divide(double n1, double n2){
        Double temp = n1/n2;  return temp.toString();
    }

}

      The definition of the remaining classes/interfaces is as below.
---------------------------------------------------------------------------------------
package com.samples.simpleCalculatorSOAP;
public class SimpleCalculatorServiceImplBase {
    public final void setEmployee1(Employee1 e){
        System.out.println(e.getId()+" "+e.getName());
    }
}
---------------------------------------------------------------------------------------
package com.samples.simpleCalculatorSOAP;
public final class Employee1 {
    private EmployeeInterface ei = null;
    public void setEmployeeInterface(EmployeeInterface e){
        this.ei=e;
    }

    public EmployeeInterface getEmployeeInterface(){
        return ei;
    }
}
---------------------------------------------------------------------------------------
package com.samples.simpleCalculatorSOAP;
public interface EmployeeInterface {
    public String exportValue( String nameid );
    public Object importValue( String name, String id );
}
---------------------------------------------------------------------------------------
package com.samples.simpleCalculatorSOAP;
public class EmployeeImpl implements EmployeeInterface
{   private String name="";  private String id="";
    public String exportValue( String nameid ){
        return nameid;
    }
    public Object importValue( String name, String id ){
        this.name=name;  this.id=id;  return name+id;
    }
}
---------------------------------------------------------------------------------------

     The example does not make sense on the implementation stand point, I
mean we are looking into the calculator implementation and then we have some
piece that talks about Employee. I was not looking to get this sample right,
this sample was meant for experimenting a few things and then hit the
IllegalAnnotationsException. Please suggest what annotations have to be
added to make this sample working. It would be great if you guys can added
the annotations in the above pseudo code itself to make this sample working.
By working I mean atleast deploying since I am hitting the issue while
deploying this app.

Thanks.

Re: IllegalAnnotationsException - exposing soap service

Posted by Rohan Sahgal <ro...@gmail.com>.
I have a question on the same lines.
I realized that tuscany no longer uses Axis for wsdl2java from 1.3
onwards, the changes file mentions performance reasons. Is the Tuscany
solution the reason that one needs to annotate their code in a variety
of circumstances. I do not need to do the same when using Axis2
natively. That obviously shields a developer from having to learn
JAXB. What are the benefits of the Tuscany approach?

Thanks,
Rohan


On Fri, Feb 13, 2009 at 3:57 AM, Ramkumar R <ra...@gmail.com> wrote:
> Hi Raymond,
>
> You are right, I can put this in place.
>
> On Fri, Feb 13, 2009 at 11:05 AM, Raymond Feng <en...@gmail.com> wrote:
>>
>> Hi,
>>
>> I think we need to hava an FAQ for these kind of issues.
>>
>> Tuscany treats POJO as JAXB for the XML serialization/deserialization.
>> JAXB has a set of default rules that map java properties to XML
>> elements. The simplest case is to use JavaBeans to represent the data.
>> Interfaces cannot be directly supported unless you use the techniques
>> described in [1].
>>
>> In your case, your Employee class can look like:
>>
>> public class Employee
>> {
>>     public String name="";  // You can use setter/getter pattern too
>>     public String id="";
>>     public String exportValue( String nameid ){
>>         return nameid;
>>     }
>>     public Object importValue( String name, String id ){
>>         this.name=name;  this.id=id;  return name+id;
>>     }
>> }
>> [1] https://jaxb.dev.java.net/guide/Mapping_interfaces.html
>>
>> Thanks,
>> Raymond
>> From: Tuscany User
>> Sent: Thursday, February 12, 2009 8:50 PM
>> To: user@tuscany.apache.org
>> Subject: IllegalAnnotationsException - exposing soap service
>> Hi all,
>>      I was trying a simple calculator soap service and ran into the
>> following exception. Please suggest on what can be done to overcome this
>> exception.
>> SEVERE: Exception thrown was: org.osoa.sca.ServiceRuntimeException:
>> com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of
>> IllegalAnnotationExceptions
>> com.samples.simpleCalculatorSOAP.EmployeeInterface is an interface, and JAXB
>> can't handle interfaces.
>>         this problem is related to the following location:
>>                 at com.samples.simpleCalculatorSOAP.EmployeeInterface
>>                 at public
>> com.samples.simpleCalculatorSOAP.EmployeeInterface
>> com.samples.simpleCalculatorSOAP.Employee1.getEmployeeInterface()
>>                 at com.samples.simpleCalculatorSOAP.Employee1
>> com.samples.simpleCalculatorSOAP.EmployeeInterface does not have a no-arg
>> default constructor.
>>         this problem is related to the following location:
>>                 at com.samples.simpleCalculatorSOAP.EmployeeInterface
>>                 at public
>> com.samples.simpleCalculatorSOAP.EmployeeInterface
>> com.samples.simpleCalculatorSOAP.Employee1.getEmployeeInterface()
>>                 at com.samples.simpleCalculatorSOAP.Employee1
>>      The class that is exposed as soap service is as below.
>> package com.samples.simpleCalculatorSOAP;
>> import org.osoa.sca.annotations.Remotable;
>> @Remotable
>>     public class SimpleCalculatorServiceImpl extends
>> SimpleCalculatorServiceImplBase {
>>     public String add(double n1, double n2){
>>         Double temp = n1+n2;  return temp.toString();
>>     }
>>     public String subtract(double n1, double n2){
>>         Double temp = n1-n2;   return temp.toString();
>>     }
>>     public String multiply(double n1, double n2){
>>         Double temp = n1*n2;  return temp.toString();
>>     }
>>     public String divide(double n1, double n2){
>>         Double temp = n1/n2;  return temp.toString();
>>     }
>>
>> }
>>
>>       The definition of the remaining classes/interfaces is as below.
>>
>> ---------------------------------------------------------------------------------------
>> package com.samples.simpleCalculatorSOAP;
>> public class SimpleCalculatorServiceImplBase {
>>     public final void setEmployee1(Employee1 e){
>>         System.out.println(e.getId()+" "+e.getName());
>>     }
>> }
>>
>> ---------------------------------------------------------------------------------------
>> package com.samples.simpleCalculatorSOAP;
>> public final class Employee1 {
>>     private EmployeeInterface ei = null;
>>     public void setEmployeeInterface(EmployeeInterface e){
>>         this.ei=e;
>>     }
>>
>>     public EmployeeInterface getEmployeeInterface(){
>>         return ei;
>>     }
>> }
>>
>> ---------------------------------------------------------------------------------------
>> package com.samples.simpleCalculatorSOAP;
>> public interface EmployeeInterface {
>>     public String exportValue( String nameid );
>>     public Object importValue( String name, String id );
>> }
>>
>> ---------------------------------------------------------------------------------------
>> package com.samples.simpleCalculatorSOAP;
>> public class EmployeeImpl implements EmployeeInterface
>> {   private String name="";  private String id="";
>>     public String exportValue( String nameid ){
>>         return nameid;
>>     }
>>     public Object importValue( String name, String id ){
>>         this.name=name;  this.id=id;  return name+id;
>>     }
>> }
>>
>> ---------------------------------------------------------------------------------------
>>
>>      The example does not make sense on the implementation stand point, I
>> mean we are looking into the calculator implementation and then we have some
>> piece that talks about Employee. I was not looking to get this sample right,
>> this sample was meant for experimenting a few things and then hit the
>> IllegalAnnotationsException. Please suggest what annotations have to be
>> added to make this sample working. It would be great if you guys can added
>> the annotations in the above pseudo code itself to make this sample working.
>> By working I mean atleast deploying since I am hitting the issue while
>> deploying this app.
>>
>> Thanks.
>
>
>
> --
> Thanks & Regards,
> Ramkumar Ramalingam
>

Re: IllegalAnnotationsException - exposing soap service

Posted by Ramkumar R <ra...@gmail.com>.
Hi Raymond,

You are right, I can put this in place.

On Fri, Feb 13, 2009 at 11:05 AM, Raymond Feng <en...@gmail.com> wrote:

>  Hi,
>
> I think we need to hava an FAQ for these kind of issues.
>
> Tuscany treats POJO as JAXB for the XML serialization/deserialization. JAXB
> has a set of default rules that map java properties to XML elements. The
> simplest case is to use JavaBeans to represent the data. Interfaces cannot
> be directly supported unless you use the techniques described in [1].
>
> In your case, your Employee class can look like:
>
> public class Employee
> {
>     public String name="";  // You can use setter/getter pattern too
>     public String id="";
>     public String exportValue( String nameid ){
>         return nameid;
>     }
>     public Object importValue( String name, String id ){
>         this.name=name;  this.id=id;  return name+id;
>     }
> }
> [1] https://jaxb.dev.java.net/guide/Mapping_interfaces.html
>
> Thanks,
> Raymond
>
>  *From:* Tuscany User <tu...@gmail.com>
> *Sent:* Thursday, February 12, 2009 8:50 PM
> *To:* user@tuscany.apache.org
> *Subject:* IllegalAnnotationsException - exposing soap service
>
> Hi all,
>      I was trying a simple calculator soap service and ran into the
> following exception. Please suggest on what can be done to overcome this
> exception.
> SEVERE: Exception thrown was: org.osoa.sca.ServiceRuntimeException:
> com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of
> IllegalAnnotationExceptions
> com.samples.simpleCalculatorSOAP.EmployeeInterface is an interface, and JAXB
> can't handle interfaces.
>         this problem is related to the following location:
>                 at com.samples.simpleCalculatorSOAP.EmployeeInterface
>                 at public
> com.samples.simpleCalculatorSOAP.EmployeeInterface
> com.samples.simpleCalculatorSOAP.Employee1.getEmployeeInterface()
>                 at com.samples.simpleCalculatorSOAP.Employee1
> com.samples.simpleCalculatorSOAP.EmployeeInterface does not have a no-arg
> default constructor.
>         this problem is related to the following location:
>                 at com.samples.simpleCalculatorSOAP.EmployeeInterface
>                 at public
> com.samples.simpleCalculatorSOAP.EmployeeInterface
> com.samples.simpleCalculatorSOAP.Employee1.getEmployeeInterface()
>                 at com.samples.simpleCalculatorSOAP.Employee1
>      The class that is exposed as soap service is as below.
> package com.samples.simpleCalculatorSOAP;
> import org.osoa.sca.annotations.Remotable;
> @Remotable
>     public class SimpleCalculatorServiceImpl extends
> SimpleCalculatorServiceImplBase {
>     public String add(double n1, double n2){
>         Double temp = n1+n2;  return temp.toString();
>     }
>     public String subtract(double n1, double n2){
>         Double temp = n1-n2;   return temp.toString();
>     }
>     public String multiply(double n1, double n2){
>         Double temp = n1*n2;  return temp.toString();
>     }
>     public String divide(double n1, double n2){
>         Double temp = n1/n2;  return temp.toString();
>     }
>
> }
>
>       The definition of the remaining classes/interfaces is as below.
>
> ---------------------------------------------------------------------------------------
> package com.samples.simpleCalculatorSOAP;
> public class SimpleCalculatorServiceImplBase {
>     public final void setEmployee1(Employee1 e){
>         System.out.println(e.getId()+" "+e.getName());
>     }
> }
>
> ---------------------------------------------------------------------------------------
> package com.samples.simpleCalculatorSOAP;
> public final class Employee1 {
>     private EmployeeInterface ei = null;
>     public void setEmployeeInterface(EmployeeInterface e){
>         this.ei=e;
>     }
>
>     public EmployeeInterface getEmployeeInterface(){
>         return ei;
>     }
> }
>
> ---------------------------------------------------------------------------------------
> package com.samples.simpleCalculatorSOAP;
> public interface EmployeeInterface {
>     public String exportValue( String nameid );
>     public Object importValue( String name, String id );
> }
>
> ---------------------------------------------------------------------------------------
> package com.samples.simpleCalculatorSOAP;
> public class EmployeeImpl implements EmployeeInterface
> {   private String name="";  private String id="";
>     public String exportValue( String nameid ){
>         return nameid;
>     }
>     public Object importValue( String name, String id ){
>         this.name=name;  this.id=id;  return name+id;
>     }
> }
>
> ---------------------------------------------------------------------------------------
>
>      The example does not make sense on the implementation stand point, I
> mean we are looking into the calculator implementation and then we have some
> piece that talks about Employee. I was not looking to get this sample right,
> this sample was meant for experimenting a few things and then hit the
> IllegalAnnotationsException. Please suggest what annotations have to be
> added to make this sample working. It would be great if you guys can added
> the annotations in the above pseudo code itself to make this sample working.
> By working I mean atleast deploying since I am hitting the issue while
> deploying this app.
>
> Thanks.
>



-- 
Thanks & Regards,
Ramkumar Ramalingam

Re: IllegalAnnotationsException - exposing soap service

Posted by Raymond Feng <en...@gmail.com>.
Hi,

I think we need to hava an FAQ for these kind of issues.

Tuscany treats POJO as JAXB for the XML serialization/deserialization. JAXB has a set of default rules that map java properties to XML elements. The simplest case is to use JavaBeans to represent the data. Interfaces cannot be directly supported unless you use the techniques described in [1].

In your case, your Employee class can look like:

public class Employee
{   
    public String name="";  // You can use setter/getter pattern too
    public String id="";
    public String exportValue( String nameid ){
        return nameid;
    }
    public Object importValue( String name, String id ){
        this.name=name;  this.id=id;  return name+id;
    }
}

[1] https://jaxb.dev.java.net/guide/Mapping_interfaces.html

Thanks,
Raymond 


From: Tuscany User 
Sent: Thursday, February 12, 2009 8:50 PM
To: user@tuscany.apache.org 
Subject: IllegalAnnotationsException - exposing soap service


Hi all,
     I was trying a simple calculator soap service and ran into the following exception. Please suggest on what can be done to overcome this exception.
SEVERE: Exception thrown was: org.osoa.sca.ServiceRuntimeException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions com.samples.simpleCalculatorSOAP.EmployeeInterface is an interface, and JAXB can't handle interfaces.
        this problem is related to the following location:
                at com.samples.simpleCalculatorSOAP.EmployeeInterface
                at public com.samples.simpleCalculatorSOAP.EmployeeInterface com.samples.simpleCalculatorSOAP.Employee1.getEmployeeInterface()
                at com.samples.simpleCalculatorSOAP.Employee1
com.samples.simpleCalculatorSOAP.EmployeeInterface does not have a no-arg default constructor.
        this problem is related to the following location:
                at com.samples.simpleCalculatorSOAP.EmployeeInterface
                at public com.samples.simpleCalculatorSOAP.EmployeeInterface com.samples.simpleCalculatorSOAP.Employee1.getEmployeeInterface()
                at com.samples.simpleCalculatorSOAP.Employee1
     The class that is exposed as soap service is as below.
package com.samples.simpleCalculatorSOAP;
import org.osoa.sca.annotations.Remotable;
@Remotable
    public class SimpleCalculatorServiceImpl extends SimpleCalculatorServiceImplBase {    
    public String add(double n1, double n2){
        Double temp = n1+n2;  return temp.toString();
    }
    public String subtract(double n1, double n2){
        Double temp = n1-n2;   return temp.toString();
    }
    public String multiply(double n1, double n2){
        Double temp = n1*n2;  return temp.toString();
    }
    public String divide(double n1, double n2){
        Double temp = n1/n2;  return temp.toString();
    }  
    
}

      The definition of the remaining classes/interfaces is as below.
---------------------------------------------------------------------------------------
package com.samples.simpleCalculatorSOAP;
public class SimpleCalculatorServiceImplBase {    
    public final void setEmployee1(Employee1 e){
        System.out.println(e.getId()+" "+e.getName());
    }    
}
---------------------------------------------------------------------------------------
package com.samples.simpleCalculatorSOAP;
public final class Employee1 {
    private EmployeeInterface ei = null;
    public void setEmployeeInterface(EmployeeInterface e){
        this.ei=e;
    }
    
    public EmployeeInterface getEmployeeInterface(){
        return ei;    
    }
}
---------------------------------------------------------------------------------------
package com.samples.simpleCalculatorSOAP;
public interface EmployeeInterface {   
    public String exportValue( String nameid );
    public Object importValue( String name, String id );
}
---------------------------------------------------------------------------------------
package com.samples.simpleCalculatorSOAP;
public class EmployeeImpl implements EmployeeInterface 
{   private String name="";  private String id="";
    public String exportValue( String nameid ){
        return nameid;
    }
    public Object importValue( String name, String id ){
        this.name=name;  this.id=id;  return name+id;
    }
}
---------------------------------------------------------------------------------------

     The example does not make sense on the implementation stand point, I mean we are looking into the calculator implementation and then we have some piece that talks about Employee. I was not looking to get this sample right, this sample was meant for experimenting a few things and then hit the IllegalAnnotationsException. Please suggest what annotations have to be added to make this sample working. It would be great if you guys can added the annotations in the above pseudo code itself to make this sample working. By working I mean atleast deploying since I am hitting the issue while deploying this app.

Thanks.