VB.NET使用为glassfish编写的Web服务:SoapHeaderException

时间:2012-02-25 01:56:48

标签: java vb.net web-services soap glassfish

使用Netbeans向导写了一个'webservice',在glassfish上运行。我使用wsdl向我的.NET客户端添加了一个引用,如果它有任何不同,那就是VB。

我显然不知道发生了什么,因为我遇到了一些砖墙。

问题是SoapHeaderException。

System.Web.Services.Protocols.SoapHeaderException: com/mysql/jdbc/Connection
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(
         SoapClientMessage message, WebResponse response, Stream responseStream, 
         Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(
         String methodName,  Object[] parameters)
at WSClient.WSClient.localhost.DatabaseGateService.createCustomerTable(String xml)
          in C:\Project\WSClient\Web References\localhost\Reference.vb:line 40
at WSClient.USAHWSClientConsumer.TestCustomer() in
          C:\Project\WSClient\Client\WSConsumer.vb:line 22

Web服务本身很简单:

@WebService()
public class DatabaseGate {
    private MySQLManagerImp manager;

    public DatabaseGate(){
        manager = new MySQLManagerImp();
    }

    @WebMethod(operationName = "createCustomerTable")
    public void createCustomerTable(@WebParam(name = "xml") String xml) {
        manager.createCustomersTable(xml);
    }
}

它需要一个xml字符串,因为我不想传递可憎的参数。

我尝试通过简单地实例化Web引用来使用该服务:

Dim ws As localhost.DatabaseWS = New localhost.DatabaseWS
// Create the xml string
Dim qbCustomerQueryRS As String = qbQuery.GetCustomerQueryXML()
Dim processedCustomerXML As String = 
    customerResponseParser.GetAllCustomerDatabaseFriendlyXML(qbCustomerQueryRS)

ws.createCustomerTable(processedCustomerXML)

我尝试在肥皂信封中写字符串,但仍然收到相同的信息。所以传递一个字符串是kaputt,因为它应该是;为什么WS会知道解析一个字符串,只是实例化并从对象中调用该方法就好像它是本地的一样,并不像我想象的那样工作。

发生了什么事?

2 个答案:

答案 0 :(得分:1)

听起来像WSDL引用com/mysql/jdbc/Connection,它不是.NET方面已知的类。如果您可以控制Web Service,请添加注释以避免外部类引用的序列化(如com/mysql/jdbc/Connection)。如果不这样做,只需将WSDL下载到文本文件,手动编辑它以删除此类/属性,然后重新创建指向已编辑文件的引用。您可以稍后在Web.config中更改端点。

答案 1 :(得分:1)

事实证明,我收到的原因是

System.Web.Services.Protocols.SoapHeaderException: com/mysql/jdbc/Connection

类似于迭戈的回答(谢谢你指出我正确的方向):参考问题。

我认为我的WS部署工作正常,因为我测试了执行的方法,但只假设我需要的数据通过网络成功传输。

使用glassfish测试另一个角度:

Service invocation threw an exception with message : null; Refer to the server log for more details

检查服务器日志,答案显而易见:

java.lang.NoClassDefFoundError: com/mysql/jdbc/Connection

我忘记将jar添加到com / mysql / jdbc / Connection。