2010-01-13 63 views
2

我在JBoss中部署了一個簡單的JAXWS webservice。它運行良好的Java客戶端,但我試圖連接使用Silverlight 3.0應用程序。我已經改變了web服務以使用Soap 1.1:Silverlight與JBoss WebService互操作問題

 

@BindingType(value = "http://schemas.xmlsoap.org/wsdl/soap/http") 
public class UserSessionBean implements UserSessionRemote { 
... 
} 
 

我在Silverlight客戶端上使用BasicHttpBinding。

這裏有兩個問題:

1 - 當我從VisualStudio中(2008和2010)連接到創建Web服務代理,下面的異常被拋出,但成功生成代理。當我嘗試更新現有的Web服務引用(但它也更新正常)時,也會發生這種情況。

 
com.sun.xml.ws.server.UnsupportedMediaException: Unsupported Content-Type: application/soap+xml; charset=utf-8 Supported ones are: [text/xml] 
    at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:291) 
    at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:128) 
    at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:287) 
    at com.sun.xml.ws.transport.http.HttpAdapter.decodePacket(HttpAdapter.java:276) 
    at com.sun.xml.ws.transport.http.HttpAdapter.access$500(HttpAdapter.java:93) 
    at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:432) 
    at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244) 
    at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135) 
    at org.jboss.wsf.stack.metro.RequestHandlerImpl.doPost(RequestHandlerImpl.java:225) 
    at org.jboss.wsf.stack.metro.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:82) 
    at org.jboss.wsf.common.servlet.AbstractEndpointServlet.service(AbstractEndpointServlet.java:85) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182) 
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
    at java.lang.Thread.run(Thread.java:619) 

2 - 當我使用代理來從該web服務的一些數據(甚至原始類型的方法),我得到的Silverlight客戶端上出現以下錯誤:

「,同時試圖讓出錯對URI'http://localhost:9090/admintool/UserSessionEJB'的請求,這可能是由於嘗試以跨域方式訪問服務而沒有適當的跨域策略或者不適合SOAP服務的策略,您可能需要聯繫該服務的所有者發佈一個跨域策略文件並確保它允許發送與SOAP相關的HTTP頭文件。這個錯誤也可能是由於使用Web服務代理中的內部類型而不使用Int ernalsVisibleToAttribute屬性。 「

在我的java代碼中設置一個斷點,我可以看到它在我運行silverlight客戶端時沒有命中,所以它可能是一個跨域問題,但我是不知道如何處理它(我已經創建了一個crossdomain.xml文件,並把它放在我的HTML頁面託管Silverlight客戶端旁邊)。

我感謝所有幫助!

回答

1

你crossdomain.xml文件必須作爲託管web服務的「網站」的根目錄,例如,如果您的端點地址是http://www.mywebsite:8080/webservice/myendpoint,則您的crossdomain.xml文件必須在地址上可用http://www.mywebsite:8080/crossdomain.xml 相同的主機,根目錄下的相同端口。 您必須參考JBoss文檔來了解如何將文件放在服務器的根目錄下。

+0

這與Crossdomain.xml無關,事實是文件已到位(如上所述),但此處顯示的錯誤不是在運行時,它是在代碼生成時在創建代理對象時視覺工作室。 –