Hello,

i found the problem. A Service on the server side has to use a holder.

1.) Implement a holder class:
===============
public final class DiplombereichHolder implements javax.xml.rpc.holders.Holder{
    
    public Diplombereich value;
    
    public DiplombereichHolder(){
        
    }
    
    public DiplombereichHolder(Diplombereich value){
        this.value = value;
    }
}
===============
(It should be possible to generate this implementation from a WSDL.)

2.) Change the signature of the methode on the service/server side from

    public void add(Diplombereich diplomBereich)...
to 

    public void add(DiplombereichHolder diplomBereich)...

and it works!

Regards
Oliver Nautsch

Quoting Oliver Nautsch <[EMAIL PROTECTED]>:

> Hello,
> 
> I want to create a service with a JavaBean as an INOUT-parameter but I get
> the
> following exception:
> 
> ===============
> java.lang.IllegalArgumentException: Illegal argument passed to
> ParameterDesc.setJavaType.  The java type
> org.dokustelle.model.work.Diplombereich does not match the mode inout
> ===============
> 
> My WSDD-file is:
> ===============
> <deployment xmlns="http://xml.apache.org/axis/wsdd/";
> xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";>
> 
>  <service name="PlaceService" provider="java:RPC">
>   <parameter name="allowedMethods" value="*"/>
>   <parameter name="className" value="org.dokustelle.services.PlaceService"/>
>  </service>
> 
>  <service name="WorkService" provider="java:RPC">
>     <parameter name="allowedMethods" value="*" />
>     <parameter name="className" value="org.dokustelle.services.WorkService"
> />
>     <parameter name="scope" value="request"/>
> 
>     <operation name="add" >
>       <parameter name="diplombereich_1" mode="INOUT"/>
>     </operation>
>   </service>
> 
>  <beanMapping qname="DokuStelleNS:org.dokustelle.model.work.Diplombereich"
> xmlns:DokuStelleNS="urn:DokuStelleService"
> languageSpecificType="java:org.dokustelle.model.work.Diplombereich"/>
>  <beanMapping qname="DokuStelleNS:org.dokustelle.model.work.Fachbereich"
> xmlns:DokuStelleNS="urn:DokuStelleService"
> languageSpecificType="java:org.dokustelle.model.work.Fachbereich"/>
>  <beanMapping qname="DokuStelleNS:org.dokustelle.model.work.Arbeit"
> xmlns:DokuStelleNS="urn:DokuStelleService"
> languageSpecificType="java:org.dokustelle.model.work.Arbeit"/>
>  <beanMapping qname="DokuStelleNS:org.dokustelle.model.work.Diplomarbeit"
> xmlns:DokuStelleNS="urn:DokuStelleService"
> languageSpecificType="java:org.dokustelle.model.work.Diplomarbeit"/>
> 
> </deployment>
> ===============
> 
> The implementation on the client side:
> ===============
> ...
>     public void add(Diplombereich diplomBereich){
>         Call call = axisConfig.getCall();
>         call.setOperationName(new QName(serviceName, "add"));
> 
>         try {
> 
>             String param1_Name = "diplombereich_1";
> 
>             call.addParameter(param1_Name, buildQName(Diplombereich.class),
> ParameterMode.INOUT );
>             call.setReturnType(XMLType.AXIS_VOID);
>             call.invoke(new Object[]{diplomBereich});
> 
>             Map ouputParams = call.getOutputParams();
> ...
> ===============
> 
> What is wrong?
> Any information will be helpful,
> 
> Thanks
> Oliver Nautsch
> 
> 
> 



Reply via email to