2013-07-30 68 views
0

我正在嘗試實現將顯示SSRS報告的Java Spring應用程序。我一直在關注本教程:http://blogs.msdn.com/b/christophputz/archive/2010/05/07/accessing-ms-reporting-services-with-java.aspx。但在某個時候,我碰到了一個問題。從Java調用SSRS 2008 Web服務

我下載了最新版本的Metro wsimport(wsimport version「2.2.8」)。

我生成web服務使用下面的命令:

wsimport -s -extension src http://devwin/reports/ReportExecution2005.asmx?wsdl 
parsing WSDL... 
[WARNING] SOAP port "ReportExecutionServiceSoap12": uses a non-standard SOAP 1.2 binding line 1885 of http://devwin/reports/ReportExecution2005.asmx?wsdl 
Generating code... 
Compiling code... 

wsimport -s src -extension http://devwin/reports/ReportService2005.asmx?wsdl 
parsing WSDL... 
[WARNING] SOAP port "ReportingService2005Soap12": uses a non-standard SOAP 1.2 binding. line 5841 of http://devwin/reports/ReportService2005.asmx?wsdl 
Generating code... 
Compiling code... 

我輸入生成的源代碼(/ SRC只是因爲主題中提到的bug)。

我用下面的行家依賴

<dependency> 
    <groupId>com.sun.xml.ws</groupId> 
    <artifactId>jaxws-rt</artifactId> 
    <version>2.2.8</version> 
</dependency> 

這裏是我的類調用報告:

import java.util.List; 

import javax.xml.ws.BindingProvider; 
import javax.xml.ws.Holder; 

import com.iphos.rankingcheck.entity.Report; 
import com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ArrayOfParameterValue; 
import com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ArrayOfString; 
import com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ArrayOfWarning; 
import com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ExecutionHeader; 
import com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ExecutionInfo; 
import com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ParameterValue; 
import com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ReportExecutionService; 
import com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ReportExecutionServiceSoap; 
import com.sun.xml.ws.developer.WSBindingProvider; 

public class ReportServiceCaller { 
    public static void callReportWS(Report report) { 
     String reportPath = "/Path/Report"; 
     String format = "HTML4.0"; 
     String historyID = null; 
     String devInfo = "<DeviceInfo><Toolbar>False</Toolbar><HTMLFragment>True</HTMLFragment></DeviceInfo>"; 
     String executionID = null; 

     Holder<String> extension = null; 
     Holder<String> mimeType = null; 
     Holder<String> encoding = null; 
     Holder<ArrayOfWarning> warnings = null; 
     Holder<ArrayOfString> streamIDs = null; 
     Holder<byte[]> result = new Holder<byte[]>(); 

     ReportExecutionService res = new ReportExecutionService(); 
     ReportExecutionServiceSoap ress = res.getReportExecutionServiceSoap(); 

     BindingProvider bp = (BindingProvider)ress; 
     WSBindingProvider wsbp = (WSBindingProvider)ress; 

     // Sessions erlauben 
     bp.getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true); 

     ExecutionInfo execInfo = new ExecutionInfo(); 

     // Parameterliste erzeugen 
     ArrayOfParameterValue apv = new ArrayOfParameterValue(); 
     List<ParameterValue> apvList = apv.getParameterValue();  

     ParameterValue param0 = new ParameterValue(); 
     param0.setName("Project"); 
     param0.setValue(report.getProject().getProjectName()); 
     apvList.add(param0); 

     // Report vorbereiten 
     execInfo = ress.loadReport(reportPath, historyID); 
     // ExecutionID für den nächsten Aufruf merken 
     executionID = execInfo.getExecutionID();  
     bp.getRequestContext().put("sessionID", executionID); 

     // ExecutionHeader Element erzeugen und es für den nächsten Aufruf 
     // and den WSBindingProvider übergeben 
     ExecutionHeader eh = new ExecutionHeader(); 
     eh.setExecutionID(executionID); 
     wsbp.setOutboundHeaders(eh); 

     // Parameter an den Report übergeben 
     ress.setExecutionParameters(apv, "en-us"); 

     // Report anfordern 
     ress.render(format, devInfo, result, extension, mimeType, encoding, warnings, streamIDs); 
     // Ergebnis des Aufrufs ausgeben 
     String resultString = new String(result.value); 
    } 
} 

當我嘗試運行報告中,我得到以下異常:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(Ljava/lang/Object;Ljava/io/OutputStream;Ljavax/xml/namespace/NamespaceContext;)V 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:839) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
root cause 

java.lang.NoSuchMethodError: com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(Ljava/lang/Object;Ljava/io/OutputStream;Ljavax/xml/namespace/NamespaceContext;)V 
    com.sun.xml.ws.db.glassfish.MarshallerBridge.marshal(MarshallerBridge.java:86) 
    com.sun.xml.bind.api.Bridge.marshal(Bridge.java:105) 
    com.sun.xml.ws.message.jaxb.JAXBHeader.writeTo(JAXBHeader.java:201) 
    com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:148) 
    com.sun.xml.ws.api.message.MessageWrapper.writeTo(MessageWrapper.java:230) 
    com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:134) 
    com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:242) 
    com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:223) 
    com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:143) 
    com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:110) 
    com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136) 
    com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050) 
    com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019) 
    com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877) 
    com.sun.xml.ws.client.Stub.process(Stub.java:464) 
    com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:174) 
    com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108) 
    com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:91) 
    com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:154) 
    com.sun.proxy.$Proxy93.setExecutionParameters(Unknown Source) 
    com.iphos.rankingcheck.util.ReportServiceCaller.callReportWS(ReportServiceCaller.java:79) 
    com.iphos.rankingcheck.controller.ReportController.display(ReportController.java:209) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:601) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 

我發現可能該方法的實現丟失,所以我試圖搜索提供它的依賴。我找到了幾個,但我能夠從這個異常只移動一個:

<dependency> 
    <groupId>com.sun.xml.bind</groupId> 
    <artifactId>jaxb-impl</artifactId> 
    <version>2.2.7</version> 
</dependency> 

當我將它,我得到了以下異常:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.xml.ws.WebServiceException: com.sun.istack.XMLStreamException2: javax.xml.bind.JAXBException: class com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ExecutionHeader nor any of its super class is known to this context. 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:681) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
root cause 

javax.xml.ws.WebServiceException: com.sun.istack.XMLStreamException2: javax.xml.bind.JAXBException: class com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ExecutionHeader nor any of its super class is known to this context. 
    com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:137) 
    com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:242) 
    com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:223) 
    com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:143) 
    com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:110) 
    com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136) 
    com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050) 
    com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019) 
    com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877) 
    com.sun.xml.ws.client.Stub.process(Stub.java:464) 
    com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:174) 
    com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108) 
    com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:91) 
    com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:154) 
    com.sun.proxy.$Proxy93.setExecutionParameters(Unknown Source) 
    com.iphos.rankingcheck.util.ReportServiceCaller.callReportWS(ReportServiceCaller.java:79) 
    com.iphos.rankingcheck.controller.ReportController.display(ReportController.java:209) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:601) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
root cause 

com.sun.istack.XMLStreamException2: javax.xml.bind.JAXBException: class com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ExecutionHeader nor any of its super class is known to this context. 
    com.sun.xml.ws.message.jaxb.JAXBHeader.writeTo(JAXBHeader.java:206) 
    com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:148) 
    com.sun.xml.ws.api.message.MessageWrapper.writeTo(MessageWrapper.java:230) 
    com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:134) 
    com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:242) 
    com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:223) 
    com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:143) 
    com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:110) 
    com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136) 
    com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050) 
    com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019) 
    com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877) 
    com.sun.xml.ws.client.Stub.process(Stub.java:464) 
    com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:174) 
    com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108) 
    com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:91) 
    com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:154) 
    com.sun.proxy.$Proxy93.setExecutionParameters(Unknown Source) 
    com.iphos.rankingcheck.util.ReportServiceCaller.callReportWS(ReportServiceCaller.java:79) 
    com.iphos.rankingcheck.controller.ReportController.display(ReportController.java:209) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:601) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
root cause 

javax.xml.bind.JAXBException: class com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ExecutionHeader nor any of its super class is known to this context. 
    com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:593) 
    com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:482) 
    com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:323) 
    com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:173) 
    com.sun.xml.ws.db.glassfish.MarshallerBridge.marshal(MarshallerBridge.java:86) 
    com.sun.xml.bind.api.Bridge.marshal(Bridge.java:145) 
    com.sun.xml.ws.message.jaxb.JAXBHeader.writeTo(JAXBHeader.java:201) 
    com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:148) 
    com.sun.xml.ws.api.message.MessageWrapper.writeTo(MessageWrapper.java:230) 
    com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:134) 
    com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:242) 
    com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:223) 
    com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:143) 
    com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:110) 
    com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136) 
    com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050) 
    com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019) 
    com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877) 
    com.sun.xml.ws.client.Stub.process(Stub.java:464) 
    com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:174) 
    com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108) 
    com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:91) 
    com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:154) 
    com.sun.proxy.$Proxy93.setExecutionParameters(Unknown Source) 
    com.iphos.rankingcheck.util.ReportServiceCaller.callReportWS(ReportServiceCaller.java:79) 
    com.iphos.rankingcheck.controller.ReportController.display(ReportController.java:209) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:601) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 

我嘗試添加其他的依賴關係,如: webservices-rt,webservices-osgi和其他,但我無法解決這個問題。

任何建議都會被讚賞。

+0

當然,我已經做了更改類ExecutionHeader如我在開頭提到的教程建議。 –

回答

-2

我使用與Metro不同的工具解決了問題。這項工作的正確工具是axis,axis-wsdl4j。

+0

您能詳細說明您找到的工具的用法嗎? – chappjc

+0

真的很好理解答案是如何解決的。 – Ben

0

這些錯誤消息都不是來自RS端。如果您的目標只是在Java應用程序中顯示報告,您是否考慮過URL access以顯示報告(在任何類型的應用程序中)?

如果你真的需要使用web服務,我會建議在RS端的enabling verbose logging and HTTP logging看看RS真的在抱怨這個請求。

+0

嗨羅恩,非常感謝你的回答。首先,我同意沒有任何錯誤來自RS端......但是:-)看起來我沒有正確使用WS調用方法,我希望某些Java Guru能夠看到我的錯誤。至於URL訪問 - 它看起來非常有前途,但我依賴於級聯參數,這些參數根據其他參數的值更改其值,並且在URL訪問中我可以看到,我只能傳遞靜態參數。 –

0

這裏是使用軸的解決方案。

的build.gradle

dependencies { 
    compile('commons-discovery:commons-discovery:0.5') 
    compile('org.apache.axis:axis:1.4') 
    compile('org.apache.axis:axis-jaxrpc:1.4') 
    compile('org.apache.axis:axis-saaj:1.4') 
    compile('axis:axis-wsdl4j:1.5.1') 

    axisGenAntTask 'org.apache.axis:axis-ant:1.4', 
     'org.apache.axis:axis:1.4', 
     'org.apache.axis:axis-jaxrpc:1.4', 
     'axis:axis-wsdl4j:1.5.1', 
     'commons-codec:commons-codec:1.3', 
     'commons-logging:commons-logging:1.1.1', 
     'commons-discovery:commons-discovery:0.2' 
} 

task genWsdlClasses { 
    doLast { 
     def destDir = file("${buildDir}/generated/src/main/java") 

     ant.taskdef(name: 'genClassesFromWSDL', 
        classname: 'org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask', 
        classpath: configurations.axisGenAntTask.asPath) 

     destDir.mkdirs() 

     ant.genClassesFromWSDL(url: "pathOrUrlToWsdl", output: destDir, username: "optionalUsername", password: "optionalPwd"); 
    } 
} 

sourceSets { 
    generated { 
     java.srcDirs "${buildDir}/generated/src/main/java" 
    } 

    main { 
     compileClasspath += generated.output 
     runtimeClasspath += generated.output 
    } 

    test { 
     compileClasspath += generated.output 
     runtimeClasspath += generated.output 
    } 
} 

compileGeneratedJava { 
    dependsOn(genWsdlClasses) 
    classpath = configurations.compile 
} 

compileJava{ 
    dependsOn(compileGeneratedJava) 
    source += sourceSets.generated.java 
} 

Java代碼

public String getHtml(String reportPath, Map<String, String> reportParameters) { 
     try { 
      ReportExecutionService reportExecution = new ReportExecutionServiceLocator(); 
      ReportExecutionServiceSoapStub ress = (ReportExecutionServiceSoapStub) reportExecution.getReportExecutionServiceSoap(); 

      final ExecutionInfo info = ress.loadReport(reportPath, null); 
      final String executionId = info.getExecutionID(); 

      SOAPHeaderElement sessionHeader = new SOAPHeaderElement(
        "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices", 
        "ExecutionHeader"); 
      SOAPElement addChildElement = sessionHeader.addChildElement("ExecutionID"); 
      addChildElement.addTextNode(executionId); 
      ress.setHeader(sessionHeader); 

      final ParameterValue[] parameters = new ParameterValue[reportParameters != null ? reportParameters.size() : 0]; 
      if (reportParameters != null && !reportParameters.isEmpty()) { 
       int i = 0; 
       for (final String name : reportParameters.keySet()) { 
        final String value = reportParameters.get(name); 
        ParameterValue parameterValue = new ParameterValue(); 
        parameterValue.setName(name); 
        parameterValue.setValue(value); 

        parameters[i++] = parameterValue; 
       } 
      } 
      ress.setExecutionParameters(parameters, "en-us"); 

      String format = "HTML4.0"; 
      String devInfo = "<DeviceInfo><Toolbar>False</Toolbar><HTMLFragment>True</HTMLFragment></DeviceInfo>"; 
      final ByteArrayHolder result = new ByteArrayHolder(); 
      final StringHolder extension = new StringHolder(); 
      final StringHolder mimeType = new StringHolder("text/html"); 
      final StringHolder encoding = new StringHolder(StandardCharsets.UTF_8.name()); 
      final ArrayOfWarningHolder warnings = new ArrayOfWarningHolder(); 
      final ArrayOfStringHolder streamIds = new ArrayOfStringHolder(); 

      ress.render(format, devInfo, result, extension, mimeType, encoding, warnings, streamIds); 

      return new String(result.value); 
     } catch (Exception e) { 
      throw new RuntimeException("Report generation error", e); 
     } 
    }