VB.NET Потребляющий веб-сервис, написанный для glassfish: SoapHeaderException - PullRequest
1 голос
/ 25 февраля 2012

Написал «веб-сервис» с мастером Netbeans, работает на 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

Сам веб-сервис прост:

@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, поскольку я не хотел передавать мерзость аргументов.

Я пытаюсь воспользоваться службой, просто создав экземпляр веб-ссылки:

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)

Я пытался написать строку в мыльном конверте, но все равно получаю то же сообщение.Таким образом, передача строки - это капут, как и должно быть;почему WS знает, что нужно проанализировать строку и просто создать и вызвать метод из объекта, как если бы он был локальным, не работает так, как я думаю.

Что происходит?

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Как оказалось, причина, по которой я получал

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

, была похожа на ответ Диего (спасибо, что указали мне в правильном направлении): Справочная проблема.

IПредполагается, что мое развертывание 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

Я забыл добавить банку в ком/mysql/jdbc/Connection.

1 голос
/ 25 февраля 2012

Похоже на WSDL-ссылки com/mysql/jdbc/Connection, который не известен на стороне .NET. Если у вас есть контроль над веб-службой, добавьте аннотации, чтобы избежать сериализации внешних ссылок на классы (например, com/mysql/jdbc/Connection). Если вы этого не сделаете, просто загрузите WSDL в текстовый файл, отредактируйте его вручную, чтобы удалить такие классы / атрибуты, и заново создайте ссылку, указывающую на отредактированный файл. Вы можете изменить конечные точки в Web.config позже.

...