使用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会知道解析一个字符串,只是实例化并从对象中调用该方法就好像它是本地的一样,并不像我想象的那样工作。
发生了什么事?
答案 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。