Silverlight与JBoss WebService互操作问题

时间:2010-01-13 14:33:42

标签: java silverlight interop jboss jax-ws

我在JBoss中部署了一个简单的JAXWS Web服务。它与java客户端运行良好,但我正在尝试使用Silverlight 3.0应用程序进行连接。我已经将web服务改为使用Soap 1.1:


@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-当我使用代理从webservice获取一些数据时(甚至是带有基本类型的方法),我在Silverlight客户端上收到以下错误:

“尝试向URI”http://localhost:9090/admintool/UserSessionEJB“发出请求时出错。这可能是由于尝试以跨域方式访问服务而没有适当的跨域策略,或者一个不适合SOAP服务的策略。您可能需要联系该服务的所有者以发布跨域策略文件,并确保它允许发送与SOAP相关的HTTP头。此错误也可能是由于使用内部错误引起的Web服务代理中的类型,不使用InternalsVisibleToAttribute属性。有关更多详细信息,请参阅内部异常。“

在我的java代码上设置一个断点,我可以看到它在运行silverlight客户端时没有被击中,所以它可能是一个跨域问题,但我不知道如何处理它(我已经创建了一个crossdomain.xml文件并将其放在托管Silverlight客户端的HTML页面旁边。

我感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您的crossdomain.xml文件必须是托管Web服务的“网站”的根目录。例如,如果您的端点地址为http://www.mywebsite:8080/webservice/myendpoint,则必须在地址http://www.mywebsite:8080/crossdomain.xml处提供您的crossdomain.xml文件 同一主机,根目录下的相同端口。 您必须参考JBoss文档,了解如何将文件放在服务器的根目录下。