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)
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
Vous devez vous connecter pour publier un commentaire.
L'erreur ci-dessus a été résolu. J'ai simplement enregistré le ArrayOfString classe, String[] avec la TypeRegistryMapping classe. Maintenant, il ne jette pas le au-dessus de sérialiser erreur.
Le Code modifié est:
OriginalL'auteur Anuj Balan