GroovyWS запрос, ни один из его суперкласса не известен в этом контексте - PullRequest
2 голосов
/ 02 июня 2011

Я пытаюсь использовать GroovyWS для использования службы SOAP.

Код .NET для этого выглядит следующим образом:

AdminService.SHCredentials creds = new AdminService.SHCredentials();
creds.Username = "Admin";
creds.Password = "123";

AdminService.GetAccountDetailsRequest req = new AdminService.GetAccountDetailsRequest();
req.Username = "user";

AdminService.GetAccountDetailsResponse res = new AdminService.GetAccountDetailsResponse();

res = admin.GetAccountDetails(creds, req);

Используя GroovyWS и выходя из примеров, я пробую аналогичный подход с:

proxy = new WSClient(wsdlUrl, this.class.classLoader, SoapVersion.SOAP_1_2)
proxy.initialize()

def credentials = proxy.create("com.acme.developer.schemas._2_6.SHCredentials")
credentials.username = "Admin"
credentials.password = "123"

def req = proxy.create("com.acme.developer.schemas._2_6.GetAccountDetailsRequest")
req.username = "user"

def res = proxy.create("com.acme.developer.schemas._2_6.GetAccountDetailsResponse")

res = proxy.GetAccountDetails(credentials, req)

Но это приводит к следующему сообщению об ошибке:

Jun 1, 2011 2:21:09 PM groovyx.net.ws.AbstractCXFWSClient getBindingOperationInfo
WARNING:  Using SOAP version: 1.2
Jun 1, 2011 2:21:09 PM org.apache.cxf.phase.PhaseInterceptorChain doIntercept
INFO: Interceptor has thrown exception, unwinding now Marshalling Error: class com.acme.developer.schemas._2_6.GetAccountDetailsRequest nor any of its super class is known to this context.
Jun 1, 2011 2:21:09 PM groovyx.net.ws.AbstractCXFWSClient invokeMethod
SEVERE: Could not invoke method.
org.apache.cxf.interceptor.Fault: Marshalling Error: class com.acme.developer.schemas._2_6.GetAccountDetailsRequest nor any of its super class is known to this context.
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:159)
    at org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:169)
    at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleHeaderPart(SoapOutInterceptor.java:227)
    at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:155)
    at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:80)
    at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:61)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:226)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:469)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:299)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:251)
    at groovyx.net.ws.AbstractCXFWSClient.invokeMethod(AbstractCXFWSClient.java:93)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)
    at com.acme.soap.client.SoapClient2.getUsers(CopyOfSoapClient.groovy:38)
    at com.acme.soap.client.SoapClient2$getUsers.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
    at com.acme.rest.testcases.positive_path.ContactsAdd.test(ContactsAdd.groovy:38)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at junit.framework.TestCase.runTest(TestCase.java:164)
    at junit.framework.TestCase.runBare(TestCase.java:130)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:120)
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: javax.xml.bind.MarshalException
 - with linked exception:
[javax.xml.bind.JAXBException: class com.acme.developer.schemas._2_6.GetAccountDetailsRequest nor any of its super class is known to this context.]
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:318)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:172)
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecoder.java:439)
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:138)
    ... 36 more
Caused by: javax.xml.bind.JAXBException: class com.acme.developer.schemas._2_6.GetAccountDetailsRequest nor any of its super class is known to this context.
    at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:246)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:261)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:653)
    at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:149)
    at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:157)
    at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:189)
    at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(ElementBeanInfoImpl.java:316)
    at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:323)
    at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:72)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:494)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:315)
    ... 39 more
Caused by: javax.xml.bind.JAXBException: class com.acme.developer.schemas._2_6.GetAccountDetailsRequest nor any of its super class is known to this context.
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:594)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:648)
    ... 47 more

Я не уверен, куда идти отсюда. Код, похоже, не пытается отправить запрос в службу. Однако если я просто отправлю proxy.GetAccountDetails (), сообщение будет отправлено, но не полностью.

...