Вызов метода soaplib, работающего на python в Java - PullRequest
0 голосов
/ 20 марта 2012

У меня следующая ситуация, я должен использовать веб-сервис, написанный на python, с использованием soaplib в Java.Я могу нормально импортировать веб-сервис в Eclipse, но когда я пытаюсь вызвать метод веб-сервиса, я получаю следующее сообщение об ошибке ...


    AxisFault
     faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
     faultSubcode: 
     faultString: org.xml.sax.SAXParseException: Content is not allowed in prolog.
     faultActor: 
     faultNode: 
     faultDetail:

Поэтому я попытался создать свой собственный маленький вебсервис, использующий soaplib, чтобы попробовать это.Вот сервер веб-службы, работающий с soaplib и внутренним http-сервером.Простой метод


    import soaplib
    from soaplib.core.service import rpc, DefinitionBase
    from soaplib.core.model.primitive import String, Integer
    from soaplib.core.server import wsgi
    from soaplib.core.model.clazz import Array
    from soaplib.core.service import soap

    class HelloWorldService(DefinitionBase):
        @soap(String,_returns=String)
        def say_hello(self,name):
            results = 'Hello, %s'%name
            print('Hello, %s' % name)
            return results

    if __name__=='__main__':
        try:
            from wsgiref.simple_server import make_server
            soap_application = soaplib.core.Application([HelloWorldService], 'tns')
            wsgi_application = wsgi.Application(soap_application)
            server = make_server('pc-frank', 7789, wsgi_application)
            server.serve_forever()
        except ImportError:
            print "Error: example server code requires Python >= 2.5"

и это Java-класс, который я пытаюсь использовать


    import java.rmi.RemoteException;
    import static java.lang.System.out;
    import tns.*;

    public class testws {
        public static void main(String[] args){
            ApplicationProxy ws = new ApplicationProxy();
            try {
                String test   = ws.say_hello("world");
                out.println(test);
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }   
    }

Любая помощь действительно приветствуется!

1 Ответ

0 голосов
/ 20 марта 2012

Звучит так, будто запрос или ответ не обрабатываются. Я бы запечатлел их обоих и проверил через инструмент проверки. В Интернете есть много таких, которые позволяют вставить XML-код и понять, почему он не проверяется.

...