L'envoi de tableau de chaîne de caractères comme paramètre à la méthode de service web à l'aide de JAXRPC

J'ai un problème pour envoyer un tableau de chaîne de caractères comme paramètre à une méthode de service web, donné dans un fichier wsdl. Quand suis en train d'envoyer un tableau de chaînes de caractères, j'obtiens l'erreur suivante.

Erreur:

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode: 
faultString: org.xml.sax.SAXException: Bad types (class java.util.ArrayList > 
class usdjws65.ArrayOfString)
faultActor: 
faultNode: 
faultDetail: 
            {http://xml.apache.org/axis/}hostname:SSLSPSD001

org.xml.sax.SAXException: Bad types (class java.util.ArrayList -> class usdjws65.ArrayOfString)
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at  org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)

Code écrit:

Call call1 = objService1.createCall(port1);
call1.setTargetEndpointAddress(targetEndPoint);
call1.addParameter("int_1", XMLType.XSD_INT, Integer.class,
                ParameterMode.IN);
        call1.addParameter("String_1", QNAME_TYPE_STRING, ParameterMode.IN);
        call1.addParameter("String_2", QNAME_TYPE_STRING_ARRAY,
                java.lang.String[].class, ParameterMode.IN);
        call1.addParameter("String_3", QNAME_TYPE_STRING_ARRAY,
                java.lang.String[].class, ParameterMode.IN);
        call1.addParameter("String_4", QNAME_TYPE_STRING, ParameterMode.IN);
        call1.addParameter("String_5", QNAME_TYPE_STRING_ARRAY,
                java.lang.String[].class, ParameterMode.IN);
        call1.addParameter("String_6", QNAME_TYPE_STRING, ParameterMode.IN);
        call1.addParameter("String_7", QNAME_TYPE_STRING, ParameterMode.IN);

        //--- Done adding PARAM's

        String[] attrVals = { "description", "test from soapUI",
                "customer", ticketHandle, "type", "I" };
        String[] attributes = { "status", "ref_num" };

        Object[] params1 = { new Integer(sid), ticketHandle, attrVals, "",
                "cr_tpl:400005", attributes, "", "" };

        String res = null;
        try {
            call1.invoke(params1);

Merci !!!!
-Aj

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

Mise à jour-1:

J'ai ajouté une classe nommée ArrayOfString avec le code suivant.
protégé java.lang.String[] string;

public ArrayOfString() {
}

public ArrayOfString(java.lang.String[] string) {
    this.string = string;
}

public java.lang.String[] getString() {
    return string;
}

public void setString(java.lang.String[] string) {
    this.string = string;
}

et c'est ainsi que le suivant,
ArrayOfString attrVals = new ArrayOfString();
attrVals.setString(new String[] { "client", "test de soapUI",
"client", ticketHandle, "type", "I" });

De même, pour les attributs de la variable de type 'ArrayOfString'.

Mais maintenant, j'obtiens l'erreur suivante::

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Serveur.userException
faultSubcode:
faultString: java.io.IOException: Aucun processus trouvé pour la classe ArrayOfString dans la base de registre org.apache.axis.encoding.TypeMappingDelegate@ef2c60
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.io.IOException: Aucun processus trouvé pour la classe ArrayOfString dans la base de registre org.apache.axis.encoding.TypeMappingDelegate@ef2c60
au org.apache.de l'axe.l'encodage.SerializationContext.serializeActual(SerializationContext.java:1507)
au org.apache.de l'axe.l'encodage.SerializationContext.serialize(SerializationContext.java:980)
au org.apache.de l'axe.l'encodage.SerializationContext.outputMultiRefs(SerializationContext.java:1055)
au org.apache.de l'axe.message.SOAPBody.outputImpl(SOAPBody.java:145)
au org.apache.de l'axe.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:478)
au org.apache.de l'axe.message.MessageElement.de sortie(MessageElement.java:1208)
au org.apache.de l'axe.client.Appel.appeler(Call.java:2757)
au org.apache.de l'axe.client.Appel.appeler(Call.java:2443)
au org.apache.de l'axe.client.Appel.appeler(Call.java:2366)
au org.apache.de l'axe.client.Appel.appeler(Call.java:1812)


Mise à jour-2:

Voici une mise à jour sur le problème qui suis confronté. Dans le fichier WSDL, j'ai trouvé quelque chose comme cela,

complexType name="ArrayOfString"
sequence
element maxOccurs="unbounded" name="string" type="xsd:string" / 
/sequence
/complexType

Bien, maintenant que suis censé utiliser cette méthode,

 <element name="createRequest">
<complexType>
<sequence>
<element name="sid" type="xsd:int" /> 
<element name="creatorHandle" type="xsd:string" /> 
<element name="attrVals" type="impl:ArrayOfString" /> 
<element name="propertyValues" type="impl:ArrayOfString" /> 
<element name="template" type="xsd:string" /> 
<element name="attributes" type="impl:ArrayOfString" /> 
<element name="newRequestHandle" type="xsd:string" /> 
<element name="newRequestNumber" type="xsd:string" /> 
</sequence>
</complexType>
</element>

Maintenant, j'ai essayé d'envoyer les paramètres "attrVals','attribue' de cette

ArrayOfstring attrVals = new ArrayOfstring();
    ArrayOfstring attributes = new ArrayOfstring();
    attrVals.setString(new String[] { "customer", "test from soapUI",
            "customer", ticketHandle, "type", "I" });
    attributes.setString(new String[] { "status", "ref_num" });

Son lancement l'exception suivante

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode: 
faultString: java.io.IOException: No serializer found for class org.tempuri.complex.data.arrays.xsd.ArrayOfstring in registry org.apache.axis.encoding.TypeMappingDelegate@11e1e67
faultActor: 
faultNode: 
faultDetail: 
{http://xml.apache.org/axis/}stackTrace:java.io.IOException: No serializer found  for class org.tempuri.complex.data.arrays.xsd.ArrayOfstring in registry org.apache.axis.encoding.TypeMappingDelegate@11e1e67
at org.apache.axis.encoding.SerializationContext.serializeActual(SerializationContext.java:1507)
at org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:980)
Avez-vous essayé WSDL2Java pour générer du code client avec des types? vous pouvez obtenir le ArrayOfString et ses sérialiseur à partir de là.
J'ai essayé WSDL2JAVA CodeGen plugin pour eclipse. J'avais enetered tous les détails requis, mais il me donne -'InvocationTargetException'.
avez-vous vérifié votre web-service est en place? il semble que ce soit vous utilisez l'url erronée ou le web-service.
Eh bien, ce problème a été résolu. Et j'ai mis à jour la réponse en fin de compte ci-dessous(après mise à Jour-2). Mais le problème avec WSDL2JAVA CodeGen est toujours persistant.

OriginalL'auteur Anuj Balan | 2011-07-01