[ https://issues.apache.org/jira/browse/TUSCANY-3901?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13071167#comment-13071167 ]
Scott Kurz commented on TUSCANY-3901: ------------------------------------- Though I'd noticed there seemed to be code missing to group like elements when unwrapping (for wrapper children with maxOccurs>1), there's also the question of why we are going down the child->child transform path rather than wrapper->wrapper. I'd assumed it had something to do with the wsdl-gen issue, however I just noticed a completely separate bug in the DOMWrapperHandler.isInstance() method. In r1151141, then, I just fixed this latter bug. Antonio, if you are actually sending the wrapper elem as payload which the service-side is expecting, this probably will be enough to cause your test to work. I'm still planning on working on the child->child transform path in this JIRA, in which we can tolerate an incorrect wrapper element (typically the wrong NS) with otherwise conforming children. I committed my test, ported from databinding-axiom, @Ignore(d) now since it will fail. And yes, there is probably another wsdlgen JIRA as Simon Nash and Mike observed. You might be interested in giving it a try. > Problem unwrapping repeated elements (for maxOccurs>1) payloads using DOM > databinding (from JAX-WS binding.ws impl) > ------------------------------------------------------------------------------------------------------------------- > > Key: TUSCANY-3901 > URL: https://issues.apache.org/jira/browse/TUSCANY-3901 > Project: Tuscany > Issue Type: Bug > Affects Versions: Java-SCA-2.0-Beta2 > Reporter: Antonio De Berardis > Assignee: Scott Kurz > Labels: array, wsdl > > @Remotable > public interface CrmService { > public void test(String[] arr); > } > generate the following WSDL: > <wsdl:definitions name="CrmServiceService" > targetNamespace="http://interfaces/"> > <wsdl:types> > <xs:schema targetNamespace="http://jaxb.dev.java.net/array" version="1.0"> > <xs:complexType final="#all" name="stringArray"> > <xs:sequence> > <xs:element maxOccurs="unbounded" minOccurs="0" name="item" nillable="true" > type="xs:string"/> > </xs:sequence> > </xs:complexType> > </xs:schema> > <xs:schema attributeFormDefault="qualified" elementFormDefault="unqualified" > targetNamespace="http://interfaces/"> > <xs:element name="test"> > <xs:complexType> > <xs:sequence> > <xs:element maxOccurs="unbounded" minOccurs="0" name="arg0" nillable="true" > type="xs:string"/> > </xs:sequence> > </xs:complexType> > </xs:element> > <xs:element name="testResponse"> > <xs:complexType/> > </xs:element> > </xs:schema> > </wsdl:types> > <wsdl:message name="test"> > <wsdl:part name="test" element="test"> </wsdl:part> > </wsdl:message> > <wsdl:message name="testResponse"> > <wsdl:part name="testResponse" element="testResponse"> </wsdl:part> > </wsdl:message> > <wsdl:portType name="CrmService"> > <wsdl:operation name="test"> > <wsdl:input message="test"> </wsdl:input> > <wsdl:output message="testResponse"> </wsdl:output> > </wsdl:operation> > </wsdl:portType> > <wsdl:binding name="CrmServiceBinding" type="CrmService"> > <SOAP:binding style="document" > transport="http://schemas.xmlsoap.org/soap/http"/> > <wsdl:operation name="test"> > <SOAP:operation/> > <wsdl:input> > <SOAP:body use="literal"/> > </wsdl:input> > <wsdl:output> > <SOAP:body use="literal"/> > </wsdl:output> > </wsdl:operation> > </wsdl:binding> > <wsdl:service name="CrmService"> > <wsdl:port name="CrmServiceSOAP11Port" binding="CrmServiceBinding"> > <SOAP:address location="http://localhost:8087/CrmComponent/CrmService"/> > </wsdl:port> > </wsdl:service> > </wsdl:definitions> > Calling the method form a simple java client causes: > GRAVE: java.lang.IllegalArgumentException: Argument is not an array > org.apache.tuscany.sca.databinding.TransformationException: > java.lang.IllegalArgumentException: Argument is not an array > at > org.apache.tuscany.sca.core.databinding.transformers.Array2ArrayTransformer.transform(Array2ArrayTransformer.java:100) > at > org.apache.tuscany.sca.databinding.DefaultTransformerExtensionPoint$LazyPullTransformer.transform(DefaultTransformerExtensionPoint.java:209) > at > org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediate(MediatorImpl.java:116) > at > org.apache.tuscany.sca.core.databinding.transformers.Input2InputTransformer.transform(Input2InputTransformer.java:232) > at > org.apache.tuscany.sca.core.databinding.transformers.Input2InputTransformer.transform(Input2InputTransformer.java:46) > at > org.apache.tuscany.sca.databinding.DefaultTransformerExtensionPoint$LazyPullTransformer.transform(DefaultTransformerExtensionPoint.java:209) > at > org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediate(MediatorImpl.java:116) > at > org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediateInput(MediatorImpl.java:444) > at > org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.processRequest(DataTransformationInterceptor.java:69) > at > org.apache.tuscany.sca.core.invocation.InterceptorAsyncImpl.invoke(InterceptorAsyncImpl.java:57) > at > org.apache.tuscany.sca.core.invocation.RuntimeInvoker.invoke(RuntimeInvoker.java:125) > at > org.apache.tuscany.sca.core.invocation.RuntimeInvoker.invoke(RuntimeInvoker.java:108) > at > org.apache.tuscany.sca.core.assembly.impl.RuntimeEndpointImpl.invoke(RuntimeEndpointImpl.java:298) > at > org.apache.tuscany.sca.binding.ws.jaxws.JAXWSBindingProvider.invoke(JAXWSBindingProvider.java:207) > at > org.apache.tuscany.sca.binding.ws.jaxws.JAXWSBindingProvider.invoke(JAXWSBindingProvider.java:61) > at > com.sun.xml.internal.ws.api.server.InstanceResolver$1.invokeProvider(InstanceResolver.java:245) > at > com.sun.xml.internal.ws.server.InvokerTube$2.invokeProvider(InvokerTube.java:145) > at > com.sun.xml.internal.ws.server.provider.SyncProviderInvokerTube.processRequest(SyncProviderInvokerTube.java:67) > at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587) > at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546) > at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531) > at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428) > at > com.sun.xml.internal.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:232) > at > com.sun.xml.internal.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:460) > at > com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:233) > at > com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:95) > at > com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:80) > at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:83) > at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83) > at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:86) > at > sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:589) > at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:83) > at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:561) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) > at java.lang.Thread.run(Thread.java:679) > Caused by: java.lang.IllegalArgumentException: Argument is not an array > at java.lang.reflect.Array.getLength(Native Method) > at > org.apache.tuscany.sca.core.databinding.transformers.Array2ArrayTransformer.transform(Array2ArrayTransformer.java:89) > ... 35 more -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira