У меня следующая ситуация, я должен использовать веб-сервис, написанный на 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();
}
}
}
Любая помощь действительно приветствуется!