java调用SQL Server Reporting Services
最近研究了一下SQL Reporting Services, 在这mark一下。Java调用SSRS,其实是调用了SSRS提供的一些webservice。
WSDL:
http://localhost:18080/ReportServer/ReportExecution2005.asmx
首先下载axis2,
运行命令wsdl2java -uri ReportExecution2005.asmx.wsdl 生成java客户端代码。
接着要实现ntlm验证
private static void setupCredential() {
final NTCredentials nt = new NTCredentials("user", "password", "host", "domain");
final CredentialsProvider myCredentialsProvider = new CredentialsProvider() {
public Credentials getCredentials(AuthScheme scheme, String host, int port, boolean proxy) throws CredentialsNotAvailableException {
return nt;
}
};
DefaultHttpParams.getDefaultParams().setParameter("http.authentication.credential-provider", myCredentialsProvider);
}
注意,这边不能直接用axis2生成的代码,打开ReportExecutionServiceStub.java,修改soap version
//Set the soap version
_serviceClient.getOptions().setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
下面是完整的测试代码
import java.io.FileOutputStream;
import java.io.InputStream;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.NTCredentials;
import org.apache.commons.httpclient.auth.AuthScheme;
import org.apache.commons.httpclient.auth.CredentialsNotAvailableException;
import org.apache.commons.httpclient.auth.CredentialsProvider;
import org.apache.commons.httpclient.params.DefaultHttpParams;
import com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ReportExecutionServiceStub;
public class Test {
public static void main(String[] args) throws Exception {
setupCredential();
ReportExecutionServiceStub es=new ReportExecutionServiceStub("http://localhost:18080/ReportServer/ReportExecution2005.asmx");
ReportExecutionServiceStub.LoadReport lr= new ReportExecutionServiceStub.LoadReport();
lr.setReport("/Report Project1/Test Report");
ReportExecutionServiceStub.LoadReportResponse info=es.loadReport(lr, null);
ReportExecutionServiceStub.SetExecutionParameters param=new ReportExecutionServiceStub.SetExecutionParameters();
ReportExecutionServiceStub.ArrayOfParameterValue ps =new ReportExecutionServiceStub.ArrayOfParameterValue();
ReportExecutionServiceStub.ParameterValue pv=new ReportExecutionServiceStub.ParameterValue();
pv.setValue("8888");
pv.setName("id");
ps.addParameterValue(pv);
param.setParameters(ps);
ReportExecutionServiceStub.ExecutionHeaderE eh=new ReportExecutionServiceStub.ExecutionHeaderE();
ReportExecutionServiceStub.ExecutionHeader header=new ReportExecutionServiceStub.ExecutionHeader();
header.setExecutionID(info.getExecutionInfo().getExecutionID());
eh.setExecutionHeader(header);
es.setExecutionParameters(param, eh, null);
ReportExecutionServiceStub.Render render=new ReportExecutionServiceStub.Render();
render.setFormat("PDF");
ReportExecutionServiceStub.RenderResponse res=es.render(render, eh, null);
InputStream in=res.getResult().getInputStream();
FileOutputStream out=new FileOutputStream("Test Report.pdf");
byte [] buff=new byte;
int lenth=-1;
while ( ( lenth=in.read(buff))!=-1) {
out.write(buff,0,lenth);
}
out.close();
}
private static void setupCredential() {
final NTCredentials nt = new NTCredentials("user", "password", "host", "domain");
final CredentialsProvider myCredentialsProvider = new CredentialsProvider() {
public Credentials getCredentials(AuthScheme scheme, String host, int port, boolean proxy) throws CredentialsNotAvailableException {
return nt;
}
};
DefaultHttpParams.getDefaultParams().setParameter("http.authentication.credential-provider", myCredentialsProvider);
}
}
页:
[1]