KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jaspersoft > jasperserver > irplugin > wsclient > WSClient


1 /*
2  * WSClient.java
3  *
4  * Created on April 1, 2006, 1:06 AM
5  *
6  */

7
8 package com.jaspersoft.jasperserver.irplugin.wsclient;
9
10 import java.io.ByteArrayInputStream JavaDoc;
11 import java.io.ByteArrayOutputStream JavaDoc;
12 import java.io.File JavaDoc;
13 import java.io.FileOutputStream JavaDoc;
14 import java.io.InputStream JavaDoc;
15 import java.io.OutputStream JavaDoc;
16 import java.io.StringReader JavaDoc;
17 import java.io.StringWriter JavaDoc;
18 import java.net.MalformedURLException JavaDoc;
19 import java.net.URL JavaDoc;
20 import java.util.ArrayList JavaDoc;
21 import java.util.HashMap JavaDoc;
22 import java.util.Iterator JavaDoc;
23 import java.util.List JavaDoc;
24 import java.util.Map JavaDoc;
25
26 import javax.activation.DataHandler JavaDoc;
27 import javax.xml.namespace.QName JavaDoc;
28
29 import net.sf.jasperreports.engine.JasperPrint;
30 import net.sf.jasperreports.engine.util.JRLoader;
31
32 import org.apache.axiom.om.OMAbstractFactory;
33 import org.apache.axiom.om.OMElement;
34 import org.apache.axiom.om.OMNamespace;
35 import org.apache.axiom.om.OMText;
36 import org.apache.axiom.soap.SOAP12Constants;
37 import org.apache.axiom.soap.SOAPEnvelope;
38 import org.apache.axiom.soap.SOAPFactory;
39 import org.apache.axis2.AxisFault;
40 import org.apache.axis2.Constants;
41 import org.apache.axis2.addressing.EndpointReference;
42 import org.apache.axis2.client.OperationClient;
43 import org.apache.axis2.client.Options;
44 import org.apache.axis2.client.ServiceClient;
45 import org.apache.axis2.context.ConfigurationContext;
46 import org.apache.axis2.context.ConfigurationContextFactory;
47 import org.apache.axis2.context.MessageContext;
48 import org.apache.axis2.transport.http.HTTPConstants;
49 import org.apache.axis2.wsdl.WSDLConstants;
50 import org.apache.commons.httpclient.HttpClient;
51 import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
52 import org.apache.commons.httpclient.UsernamePasswordCredentials;
53 import org.apache.commons.httpclient.auth.AuthScope;
54 import org.exolab.castor.xml.Marshaller;
55 import org.exolab.castor.xml.Unmarshaller;
56
57 import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.Argument;
58 import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.ListItem;
59 import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.OperationResult;
60 import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.Request;
61 import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.ResourceDescriptor;
62 import com.jaspersoft.jasperserver.irplugin.BinaryFileDataSource;
63 import com.jaspersoft.jasperserver.irplugin.JServer;
64
65 /**
66  *
67  * @author gtoffoli
68  */

69 public class WSClient {
70     
71     private JServer server = null;
72     
73     private EndpointReference targetEPR = null; //new EndpointReference("http://127.0.0.1:8080/axis2/services/repository-ws-1.0");
74

75     private ServiceClient serviceClient;
76     
77     public WSClient(JServer server) throws Exception JavaDoc {
78         this.server = server;
79         
80         URL JavaDoc url;
81         try {
82             url = new URL JavaDoc(server.getUrl());
83         } catch (MalformedURLException JavaDoc e1) {
84             throw new Exception JavaDoc(e1);
85         }
86
87         targetEPR = new EndpointReference(url.toString());
88         serviceClient = null;
89     }
90   
91     
92     /**
93      * List all datasources. It returns a list of resourceDescriptors.
94      */

95     public java.util.List JavaDoc listDatasources() throws Exception JavaDoc {
96         
97         Request req = new Request();
98                             
99         req.setOperationName( Request.OPERATION_LIST);
100         req.setResourceDescriptor( null );
101         
102         req.getArguments().add(new Argument(Argument.LIST_DATASOURCES, Argument.VALUE_TRUE));
103
104         StringWriter JavaDoc xmlStringWriter = new StringWriter JavaDoc();
105         Marshaller.marshal(req, xmlStringWriter);
106
107         return list( xmlStringWriter.toString());
108     }
109     
110     /**
111      * It returns a list of resourceDescriptors.
112      */

113     public java.util.List JavaDoc list(ResourceDescriptor descriptor) throws Exception JavaDoc
114     {
115         Request req = new Request();
116
117         req.setOperationName( Request.OPERATION_LIST);
118         req.setResourceDescriptor( descriptor);
119
120         StringWriter JavaDoc xmlStringWriter = new StringWriter JavaDoc();
121         Marshaller.marshal(req, xmlStringWriter);
122         
123         return list(xmlStringWriter.toString());
124     }
125     
126     /**
127      * It returns a list of resourceDescriptors.
128      */

129     public String JavaDoc getVersion() throws Exception JavaDoc
130     {
131         Request req = new Request();
132
133         req.setOperationName( Request.OPERATION_LIST);
134         req.setResourceDescriptor( null );
135
136         StringWriter JavaDoc xmlRequest = new StringWriter JavaDoc();
137         Marshaller.marshal(req, xmlRequest);
138         
139         OperationClient opClient = null;
140         MessageContext requestMessageContext = null;
141     
142         try {
143             String JavaDoc opStr = "list";
144            
145             requestMessageContext = new MessageContext();
146             java.util.SortedMap JavaDoc sm = new java.util.TreeMap JavaDoc();
147             sm.put("request", xmlRequest.toString());
148             requestMessageContext.setEnvelope(getRequestEnvelope(opStr, sm));
149             
150             opClient = getServiceClient().createClient(ServiceClient.ANON_OUT_IN_OP);
151             opClient.addMessageContext(requestMessageContext);
152             opClient.setOptions(getServiceClient().getOptions());
153
154             opClient.execute(true);
155             
156             SOAPEnvelope result = opClient.getMessageContext(
157                     WSDLConstants.MESSAGE_LABEL_IN_VALUE).getEnvelope();
158
159             OMElement resultOM = result.getBody().getFirstChildWithName(new QName JavaDoc("result"));
160             //OperationResult or = XMLHelper.readOperationResult( resultOM.getText() );
161
StringReader JavaDoc xmlStringReader = new StringReader JavaDoc(resultOM.getText());
162             OperationResult or = (OperationResult)Unmarshaller.unmarshal(OperationResult.class, xmlStringReader);
163             
164             return or.getVersion();
165             
166         } catch (Exception JavaDoc ex) {
167             ex.printStackTrace();
168             throw ex;
169         } finally {
170             if (opClient != null) {
171                 if (requestMessageContext != null) {
172                     opClient.complete(requestMessageContext);
173                 }
174                 opClient.reset();
175             }
176         }
177     }
178     
179     
180     /**
181      * It returns a list of resourceDescriptors.
182      */

183     public java.util.List JavaDoc list(String JavaDoc xmlRequest) throws Exception JavaDoc {
184         OperationClient opClient = null;
185         MessageContext requestMessageContext = null;
186     
187         try {
188             String JavaDoc opStr = "list";
189            
190             requestMessageContext = new MessageContext();
191             java.util.SortedMap JavaDoc sm = new java.util.TreeMap JavaDoc();
192             sm.put("request", xmlRequest);
193             requestMessageContext.setEnvelope(getRequestEnvelope(opStr, sm));
194             
195             opClient = getServiceClient().createClient(ServiceClient.ANON_OUT_IN_OP);
196             opClient.addMessageContext(requestMessageContext);
197             opClient.setOptions(getServiceClient().getOptions());
198
199             opClient.execute(true);
200
201             SOAPEnvelope result = opClient.getMessageContext(
202                     WSDLConstants.MESSAGE_LABEL_IN_VALUE).getEnvelope();
203
204             OMElement resultOM = result.getBody().getFirstChildWithName(new QName JavaDoc("result"));
205             //OperationResult or = XMLHelper.readOperationResult( resultOM.getText() );
206
StringReader JavaDoc xmlStringReader = new StringReader JavaDoc(resultOM.getText());
207             OperationResult or = (OperationResult)Unmarshaller.unmarshal(OperationResult.class, xmlStringReader);
208             
209             if (or.getReturnCode() != 0) throw new Exception JavaDoc( or.getReturnCode() + " - " + or.getMessage() );
210             
211             return or.getResourceDescriptors();
212             
213         } catch (Exception JavaDoc ex) {
214             ex.printStackTrace();
215             throw ex;
216         } finally {
217             if (opClient != null) {
218                 if (requestMessageContext != null) {
219                     opClient.complete(requestMessageContext);
220                 }
221                 opClient.reset();
222             }
223         }
224     }
225     
226     
227     public void delete(ResourceDescriptor descriptor) throws Exception JavaDoc
228     {
229         delete(descriptor, null);
230     }
231     /**
232      * Delete a resource and its contents
233      * Specify the reportUnitUri if you are deleting something inside this report unit.
234      *
235      */

236     public void delete(ResourceDescriptor descriptor, String JavaDoc reportUnitUri) throws Exception JavaDoc {
237         OperationClient opClient = null;
238         MessageContext requestMessageContext = null;
239         try {
240             String JavaDoc opStr = "delete";
241            
242             Request req = new Request();
243
244             req.setOperationName("delete");
245             req.setResourceDescriptor( descriptor );
246             
247             req.getArguments().add(new Argument(Argument.MODIFY_REPORTUNIT, reportUnitUri ));
248                             
249             requestMessageContext = new MessageContext();
250             java.util.SortedMap JavaDoc sm = new java.util.TreeMap JavaDoc();
251             
252             StringWriter JavaDoc xmlStringWriter = new StringWriter JavaDoc();
253             Marshaller.marshal(req, xmlStringWriter);
254                             
255             sm.put("request", xmlStringWriter.toString());
256             requestMessageContext.setEnvelope(getRequestEnvelope(opStr, sm));
257             
258             opClient = getServiceClient().createClient(ServiceClient.ANON_OUT_IN_OP);
259             opClient.addMessageContext(requestMessageContext);
260             opClient.setOptions(getServiceClient().getOptions());
261
262             opClient.execute(true);
263
264             SOAPEnvelope result = opClient.getMessageContext(
265                     WSDLConstants.MESSAGE_LABEL_IN_VALUE).getEnvelope();
266
267             OMElement resultOM = result.getBody().getFirstChildWithName(new QName JavaDoc("result"));
268             //OperationResult or = XMLHelper.readOperationResult( resultOM.getText() );
269
StringReader JavaDoc xmlStringReader = new StringReader JavaDoc(resultOM.getText());
270             OperationResult or = (OperationResult)Unmarshaller.unmarshal(OperationResult.class, xmlStringReader);
271             
272             if (or.getReturnCode() != 0) throw new Exception JavaDoc( or.getReturnCode() + " - " + or.getMessage() );
273             
274         } catch (Exception JavaDoc ex) {
275             ex.printStackTrace();
276             throw ex;
277         } finally {
278             if (opClient != null) {
279                 if (requestMessageContext != null) {
280                     opClient.complete(requestMessageContext);
281                 }
282                 opClient.reset();
283             }
284         }
285     }
286     
287     /**
288      * Export a resource using the "get" ws and save the resource in the file specified by
289      * the user...
290      * If the outputFile is null, the argument "NO_ATTACHMENT" is added to the request in order
291      * of avoid the attachment trasmission.
292      *
293      */

294     public ResourceDescriptor get(ResourceDescriptor descriptor, File JavaDoc outputFile) throws Exception JavaDoc
295     {
296         return get(descriptor, outputFile, null);
297     }
298     /**
299      * Export a resource using the "get" ws and save the resource in the file specified by
300      * the user...
301      * If the outputFile is null, the argument "NO_ATTACHMENT" is added to the request in order
302      * of avoid the attachment trasmission.
303      *
304      */

305     public ResourceDescriptor get(ResourceDescriptor descriptor, File JavaDoc outputFile, java.util.List JavaDoc args) throws Exception JavaDoc
306     {
307         OperationClient opClient = null;
308         MessageContext requestMessageContext = null;
309         try {
310             String JavaDoc opStr = "get";
311            
312             Request req = new Request();
313
314             req.setOperationName("get");
315             req.setResourceDescriptor( descriptor );
316             
317             if (args != null)
318             {
319                 for (int i=0; i<args.size(); ++i)
320                 {
321                     Argument arg = (Argument)args.get(i);
322                     req.getArguments().add(arg);
323                 }
324             }
325             
326             if (outputFile == null)
327             {
328                 req.getArguments().add("NO_ATTACHMENT");
329             }
330                             
331             requestMessageContext = new MessageContext();
332             java.util.SortedMap JavaDoc sm = new java.util.TreeMap JavaDoc();
333             
334             StringWriter JavaDoc xmlStringWriter = new StringWriter JavaDoc();
335             Marshaller.marshal(req, xmlStringWriter);
336                             
337             sm.put("request", xmlStringWriter.toString());
338             requestMessageContext.setEnvelope(getRequestEnvelope(opStr, sm));
339             
340             opClient = getServiceClient().createClient(ServiceClient.ANON_OUT_IN_OP);
341             opClient.addMessageContext(requestMessageContext);
342             
343             Options options = new Options(getServiceClient().getOptions());
344             options.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
345             // enabling MTOM in the client side
346
options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
347             options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
348         
349             opClient.setOptions(options);
350
351             opClient.execute(true);
352
353             SOAPEnvelope result = opClient.getMessageContext(
354                     WSDLConstants.MESSAGE_LABEL_IN_VALUE).getEnvelope();
355             
356             OMElement resultOM = result.getBody().getFirstChildWithName(new QName JavaDoc("result"));
357
358             //OperationResult or = XMLHelper.readOperationResult( resultOM.getText() );
359
StringReader JavaDoc xmlStringReader = new StringReader JavaDoc(resultOM.getText());
360             OperationResult or = (OperationResult)Unmarshaller.unmarshal(OperationResult.class, xmlStringReader);
361             
362             if (or.getReturnCode() != 0) throw new Exception JavaDoc( or.getReturnCode() + " - " + or.getMessage() );
363             
364             OMElement attachmentElement = resultOM.getFirstChildWithName(new QName JavaDoc("attachment"));
365             
366             
367             if (attachmentElement != null && outputFile != null)
368             {
369                 OMText binaryNode = (OMText)attachmentElement.getFirstOMChild();
370                 DataHandler JavaDoc actualDH;
371                 actualDH = (DataHandler JavaDoc)binaryNode.getDataHandler();
372             
373                 // Save the content in the file...
374
byte[] buffer = new byte[1024];
375                 InputStream JavaDoc is = actualDH.getInputStream();
376                 OutputStream JavaDoc os = new FileOutputStream JavaDoc(outputFile);
377                 int bCount = 0;
378                 while ( (bCount = is.read(buffer)) > 0)
379                 {
380                     os.write( buffer, 0, bCount);
381                 }
382                 is.close();
383                 os.close();
384             }
385             else if (outputFile != null)
386             {
387                 throw new Exception JavaDoc("attachment nullo!" + attachmentElement);
388             }
389             
390             return (ResourceDescriptor)or.getResourceDescriptors().get(0);
391             
392         } catch (Exception JavaDoc ex) {
393             ex.printStackTrace();
394             throw ex;
395         } finally {
396             if (opClient != null) {
397                 if (requestMessageContext != null) {
398                     opClient.complete(requestMessageContext);
399                 }
400                 opClient.reset();
401             }
402         }
403         
404     }
405     
406     public JasperPrint runReport(ResourceDescriptor descriptor, java.util.Map JavaDoc parameters) throws Exception JavaDoc {
407         List JavaDoc args = new ArrayList JavaDoc(1);
408         args.add(new Argument(Argument.RUN_OUTPUT_FORMAT, Argument.RUN_OUTPUT_FORMAT_JRPRINT));
409         Map JavaDoc attachments = runReport(descriptor, parameters, args);
410
411         FileContent content = null;
412         if (attachments != null && !attachments.isEmpty()) {
413             content = (FileContent) attachments.get("jasperPrint");
414         }
415
416         if (content == null) {
417             throw new Exception JavaDoc("No JasperPrint");
418         }
419
420         InputStream JavaDoc is = new ByteArrayInputStream JavaDoc(content.getData());
421         
422         JasperPrint print = (JasperPrint) JRLoader.loadObject(is);
423         return print;
424     }
425     
426     /**
427      * This method run a report. The return is an OperationResult.
428      * If the result is succesfull, the message contains a set of strings
429      * (one for each row) with the list of files attached complete of the
430      * relative path. I.e.
431      *
432      * main_report.html
433      * images/logo1.jpg
434      * images/chartxyz.jpg
435      *
436      * Arguments:
437      *
438      *
439      *
440      * The request must contains the descriptor of the report to execute
441      * (only the URI is used).
442      * Arguments can be attached to the descriptor as childs. Each argument
443      * is a ListItem, with the parameter name as Name and the object
444      * rapresenting the value as Value.
445      *
446      * Operation result Codes:
447      * 0 - Success
448      * 1 - Generic error
449      *
450      */

451     public Map JavaDoc runReport(ResourceDescriptor descriptor, java.util.Map JavaDoc parameters, List JavaDoc args) throws Exception JavaDoc
452     {
453         OperationClient opClient = null;
454         MessageContext requestMessageContext = null;
455         try {
456             String JavaDoc opStr = "runReport";
457            
458             Request req = new Request();
459
460             req.setOperationName("runReport");
461             ResourceDescriptor newRUDescriptor = new ResourceDescriptor();
462             newRUDescriptor.setUriString(descriptor.getUriString() );
463             for (Iterator JavaDoc i= parameters.keySet().iterator(); i.hasNext() ;)
464             {
465                 String JavaDoc key = ""+i.next();
466                 newRUDescriptor.getChildren().add( new ListItem(key+"",parameters.get( key )));
467             }
468             
469             req.setResourceDescriptor( newRUDescriptor );
470             req.getArguments().addAll(args);
471                             
472             requestMessageContext = new MessageContext();
473             java.util.SortedMap JavaDoc sm = new java.util.TreeMap JavaDoc();
474             
475             StringWriter JavaDoc xmlStringWriter = new StringWriter JavaDoc();
476             Marshaller.marshal(req, xmlStringWriter);
477                             
478             sm.put("request", xmlStringWriter.toString());
479             requestMessageContext.setEnvelope(getRequestEnvelope(opStr, sm));
480             
481             opClient = getServiceClient().createClient(ServiceClient.ANON_OUT_IN_OP);
482             opClient.addMessageContext(requestMessageContext);
483             
484             Options options = new Options(getServiceClient().getOptions());
485             options.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
486             // enabling MTOM in the client side
487
options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
488             options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
489         
490             opClient.setOptions(options);
491
492             opClient.execute(true);
493
494             SOAPEnvelope result = opClient.getMessageContext(
495                     WSDLConstants.MESSAGE_LABEL_IN_VALUE).getEnvelope();
496             
497             OMElement resultOM = result.getBody().getFirstChildWithName(new QName JavaDoc("result"));
498
499             //OperationResult or = XMLHelper.readOperationResult( resultOM.getText() );
500
StringReader JavaDoc xmlStringReader = new StringReader JavaDoc(resultOM.getText());
501             OperationResult or = (OperationResult)Unmarshaller.unmarshal(OperationResult.class, xmlStringReader);
502             
503             if (or.getReturnCode() != 0) throw new Exception JavaDoc( or.getReturnCode() + " - " + or.getMessage() );
504             
505             Map JavaDoc results = new HashMap JavaDoc();
506             
507             for (Iterator JavaDoc it = resultOM.getChildElements(); it.hasNext(); ) {
508                 //System.out.println("Attachment child element");
509
OMElement attachmentElement = (OMElement) it.next();
510                 
511                 if (attachmentElement != null)
512                 {
513                     OMText binaryNode = (OMText) attachmentElement.getFirstOMChild();
514                     
515                     String JavaDoc name = attachmentElement.getQName().getLocalPart();
516                     
517                     DataHandler JavaDoc actualDH = (DataHandler JavaDoc) binaryNode.getDataHandler();
518                     
519                     InputStream JavaDoc is = actualDH.getInputStream();
520                     ByteArrayOutputStream JavaDoc bos = new ByteArrayOutputStream JavaDoc();
521                     
522                     byte[] data = new byte[1000];
523                     int bytesRead;
524                     
525                     while ((bytesRead = is.read(data)) != -1) {
526                         bos.write(data, 0, bytesRead);
527                     }
528
529                     data = bos.toByteArray();
530                     
531                     String JavaDoc contentType = actualDH.getContentType();
532                     
533                     FileContent content = new FileContent();
534                     content.setData(data);
535                     content.setMimeType(contentType);
536                     content.setName(name);
537
538                     results.put(name, content);
539                    
540                 }
541                 else
542                 {
543                     throw new Exception JavaDoc("attachment nullo!" + attachmentElement);
544                 }
545             }
546             return results;
547         } catch (Exception JavaDoc ex) {
548             ex.printStackTrace();
549             throw ex;
550         } finally {
551             if (opClient != null) {
552                 if (requestMessageContext != null) {
553                     opClient.complete(requestMessageContext);
554                 }
555                 opClient.reset();
556             }
557         }
558         
559     }
560     
561     
562     /**
563      * Add or Modify a resource. Return the updated ResourceDescriptor
564      *
565      */

566     public ResourceDescriptor addOrModifyResource(ResourceDescriptor descriptor, File JavaDoc inputFile) throws Exception JavaDoc
567     {
568         return modifyReportUnitResource(null, descriptor, inputFile);
569     }
570         
571     public static SOAPEnvelope getRequestEnvelope(String JavaDoc operationName, java.util.SortedMap JavaDoc params) {
572         return getRequestEnvelope(operationName, params, null);
573     }
574     
575     public static SOAPEnvelope getRequestEnvelope(String JavaDoc operationName, java.util.SortedMap JavaDoc params, File JavaDoc attachment) {
576         SOAPFactory fac = OMAbstractFactory.getSOAP11Factory();
577         SOAPEnvelope envelope = fac.getDefaultEnvelope();
578         OMNamespace namespace = fac.createOMNamespace(
579                 "http://jasperserver/test/namespace1", "ns1");
580         
581         OMElement o_params = fac.createOMElement(operationName, namespace);
582         
583         Iterator JavaDoc iterator = params.keySet().iterator();
584         while (iterator.hasNext()) {
585             
586             String JavaDoc pName = ""+iterator.next();
587             OMElement param1OM = fac.createOMElement(pName, namespace);
588             Object JavaDoc o = params.get(pName);
589             if ((o!=null))
590             {
591                 param1OM.setText( o.toString() );
592             }
593             
594             //if (pName.equals("request"))
595
//{
596

597             //}
598

599             o_params.addChild(param1OM);
600         }
601         if (attachment != null && attachment.exists())
602         {
603             BinaryFileDataSource fds = new BinaryFileDataSource(attachment);
604             DataHandler JavaDoc expectedDH = new DataHandler JavaDoc( fds );
605
606             OMText textData = fac.createOMText(expectedDH, true);
607             OMElement dataElement = fac.createOMElement("attachment",namespace);
608             textData.setOptimize(true);
609             dataElement.addChild(textData);
610             o_params.addChild(dataElement);
611         }
612         envelope.getBody().setFirstChild(o_params);
613         return envelope;
614     }
615         
616     
617     public void setTargetEPR(String JavaDoc targetEPR) {
618         this.targetEPR = new EndpointReference(targetEPR);
619         
620     }
621     
622     public JServer getServer() {
623         return server;
624     }
625
626     public void setServer(JServer server) {
627         this.server = server;
628     }
629
630     public String JavaDoc getUsername() {
631         return getServer().getUsername();
632     }
633
634     public String JavaDoc getPassword() {
635         return getServer().getPassword();
636     }
637
638     public ServiceClient getServiceClient() throws AxisFault {
639         if (serviceClient == null)
640         {
641             ConfigurationContext context;
642             context = ConfigurationContextFactory.createConfigurationContextFromFileSystem(null, null);
643         
644             HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager());
645             httpClient.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(getUsername(), getPassword()));
646             httpClient.getParams().setAuthenticationPreemptive(true);
647             context.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);
648
649             serviceClient = new ServiceClient(context, null);
650             
651             //options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
652
serviceClient.getOptions().setManageSession(true);
653             serviceClient.getOptions().setTo(targetEPR);
654             serviceClient.getOptions().setProperty(HTTPConstants.REUSE_HTTP_CLIENT, new Boolean JavaDoc(true));
655         }
656         return serviceClient;
657     }
658     
659     public void setServiceClient(ServiceClient serviceClient) {
660         this.serviceClient = serviceClient;
661     }
662
663     public EndpointReference getTargetEPR() {
664         return targetEPR;
665     }
666
667     public void setTargetEPR(EndpointReference targetEPR) {
668         this.targetEPR = targetEPR;
669     }
670
671     public ResourceDescriptor modifyReportUnitResource(String JavaDoc reportUnitUri, ResourceDescriptor descriptor, File JavaDoc inputFile) throws Exception JavaDoc
672     {
673         OperationClient opClient = null;
674         MessageContext requestMessageContext = null;
675         try {
676             String JavaDoc opStr = "put";
677            
678             Request req = new Request();
679
680             req.setOperationName("put");
681             req.getArguments().add(new Argument(Argument.MODIFY_REPORTUNIT, reportUnitUri ));
682             
683             if (inputFile != null)
684             {
685                 descriptor.setHasData(true);
686             }
687             
688             req.setResourceDescriptor( descriptor );
689             
690             requestMessageContext = new MessageContext();
691             java.util.SortedMap JavaDoc sm = new java.util.TreeMap JavaDoc();
692             
693             StringWriter JavaDoc xmlStringWriter = new StringWriter JavaDoc();
694             Marshaller.marshal(req, xmlStringWriter);
695                             
696             sm.put("request", xmlStringWriter.toString());
697
698             requestMessageContext.setEnvelope(getRequestEnvelope(opStr, sm, inputFile));
699             
700             opClient = getServiceClient().createClient(ServiceClient.ANON_OUT_IN_OP);
701             opClient.addMessageContext(requestMessageContext);
702             
703             Options options = new Options(getServiceClient().getOptions());
704             options.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
705             // enabling MTOM in the client side
706
options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
707             options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
708             
709             opClient.setOptions(options);
710
711             opClient.execute(true);
712
713             SOAPEnvelope result = opClient.getMessageContext(
714                     WSDLConstants.MESSAGE_LABEL_IN_VALUE).getEnvelope();
715             
716             OMElement resultOM = result.getBody().getFirstChildWithName(new QName JavaDoc("result"));
717
718             //OperationResult or = XMLHelper.readOperationResult( resultOM.getText() );
719
StringReader JavaDoc xmlStringReader = new StringReader JavaDoc(resultOM.getText());
720             OperationResult or = (OperationResult)Unmarshaller.unmarshal(OperationResult.class, xmlStringReader);
721             
722             if (or.getReturnCode() != 0) throw new Exception JavaDoc( or.getReturnCode() + " - " + or.getMessage() );
723             
724             return (ResourceDescriptor)or.getResourceDescriptors().get(0);
725             
726         } catch (Exception JavaDoc ex) {
727             ex.printStackTrace();
728             throw ex;
729         } finally {
730             if (opClient != null) {
731                 if (requestMessageContext != null) {
732                     opClient.complete(requestMessageContext);
733                 }
734                 opClient.reset();
735             }
736         }
737         
738     }
739 }
Popular Tags