Hi,
Based on jax-ws 2.0 technology, I built a java client application to access a report via the web service interface of the SQL Server Reporting Services 2005.
I used the jax-ws "wsimport" tool to generate the java classes needed to call the web services (The class generation is based on the wsdl and I used this one http://serverName/reportserver/reportexecution2005.asmx?wsdl) and wrote the following sample code :
ReportExecutionService service = new ReportExecutionService();
ReportExecutionServiceSoap rs = service.getReportExecutionServiceSoap();
String reportPath = "HelloWorld";
String format = "MHTML";
String devInfo = "<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";
Holder<byte[]> result = new Holder<byte[]>();
Holder<String> extension = new Holder<String>();
Holder<String> mimeType = new Holder<String>();
Holder<String> encoding = new Holder<String>();
Holder<ArrayOfWarning> warnings = new Holder<ArrayOfWarning>();
Holder<ArrayOfString> streamIDs = new Holder<ArrayOfString>();
try {
ExecutionInfo execInfo = rs.loadReport(reportPath, null);
rs.render(format, devInfo, result, extension, mimeType, encoding, warnings, streamIDs);
}
catch (Exception e) {
System.out.println( e );
}
The trouble is that an exception is caught on the call to the render method
: The session identifier is missing. A session identifier is required for this operation. ---> The session identifier is missing. A session identifier is required for this operation.javax.xml.ws.soap.SOAPFaultException
I found on the web (in C# examples) that this SessionId is supposed to be contained in the ExecutionId attribute of an
ExecutionHeader object. The ReportExecutionServiceSoap class (my rs object in the example) does not offer any way to directly set this SessionId or to associate an ExceptionHeader before calling the render method.
Have you ever tried - and managed - to do it.
Many thanks