Bonjour � tous,
J'ai un souci pour faire du swa attachment sous axis2 pour envoyer depuis un client un fichier sur un serveur.
Je g�n�re mon stub et mes objects de messages avec wsdl2java.
Je ne fais pas du MTOM en d�clarant un element binary64 dans le wsdl car j'utilise Xmlbeans comme databindings et j'ai des outofmemory et j'ai cru comprendre que �a n'�tais pas vraiment possible de passer outre car Xmlbeans charge forcement les elements en m�moire.
Bref, j'ai donc voulu tester la m�thode swa d�crite ici: http://ws.apache.org/axis2/1_5_1/mtom-guide.html mais j'ai cette exception:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| java.lang.IllegalArgumentException: Null OutputStream specified
at org.apache.xmlbeans.impl.store.Cursor._save(Cursor.java:577)
at org.apache.xmlbeans.impl.store.Cursor.save(Cursor.java:2544)
at org.apache.xmlbeans.impl.values.XmlObjectBase.save(XmlObjectBase.java:180)
at maltese.corto.communication.soapgenerated.MalteseStub$46.serialize(MalteseStub.java:7236)
at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.internalSerializeAndConsume(OMSourcedElementImpl.java:738)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:966)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerializeAndConsume(OMElementImpl.java:995)
at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.serializeInternally(SOAPEnvelopeImpl.java:254)
at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvelopeImpl.java:242)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerializeAndConsume(OMElementImpl.java:995)
at org.apache.axiom.om.impl.llom.OMNodeImpl.serializeAndConsume(OMNodeImpl.java:498)
at org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:72)
at org.apache.axis2.transport.http.AxisRequestEntity.writeRequest(AxisRequestEntity.java:84)
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346)
at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:542)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199)
at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
... |
Alors �a m'embete un peu d'utiliser cette methode swa car je doit aller taper dans le stub g�n�r� pour avoir acc�s au messagcontext. mais je pourrais p� abstraire �a lorsque j'aurais r�ussi � le faire marcher...
Voici le code de mon op�ration dans mon stub g�n�r�:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| public monOperationRspDocument monOperation(
monOperationReqDocument monOperationReq62)
throws java.rmi.RemoteException
{
org.apache.axis2.context.MessageContext _messageContext = null;
try
{
org.apache.axis2.client.OperationClient _operationClient = _serviceClient.createClient(_operations[14].getName());
_operationClient.getOptions().setAction("monOperation");
_operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(true);
_operationClient.getOptions().setProperty(Constants.Configuration.ENABLE_SWA, Constants.VALUE_TRUE);
addPropertyToOperationClient(_operationClient, org.apache.axis2.description.WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR, "&");
// create a message context
_messageContext = new org.apache.axis2.context.MessageContext();
// create SOAP envelope with that payload
org.apache.axiom.soap.SOAPEnvelope env = null;
env = toEnvelope(getFactory(_operationClient.getOptions().getSoapVersionURI()), monOperationReq62, optimizeContent(new javax.xml.namespace.QName("monService", "monOperation")));
//adding SOAP soap_headers
_serviceClient.addHeadersToEnvelope(env);
// set the message context with that soap envelope
_messageContext.setEnvelope(env);
// add attachment
FileDataSource fileDataSource = new FileDataSource("test-resources/mtom/test.jpg");
DataHandler dataHandler = new DataHandler(fileDataSource);
_messageContext.addAttachment("FirstAttachment", dataHandler);
// add the message contxt to the operation client
_operationClient.addMessageContext(_messageContext);
//execute the operation client
_operationClient.execute(true); |
Je m'arrete l� car l'exception est jet�e dans excecute...
Je pr�cise que lorsque je commente la ligne
_operationClient.getOptions().setProperty(Constants.Configuration.ENABLE_SWA, Constants.VALUE_TRUE);
je communique avec mon serveur, mais je n'ai pas d'attachment...
Voil�, si vous avez une id�e sur une property � setter ou autre je suis tr�s preneur! merci d'avance!
Partager