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:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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�:

Code : S�lectionner tout - Visualiser dans une fen�tre � part
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
Code : S�lectionner tout - Visualiser dans une fen�tre � part
_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!