Hello there! I'm developing a Topdown webservice, and defining my own WSDL, and using @WebserviceProvider annotations. The service is running, I can access it using webservice explorer or SOAPUI. When I generate the client using JBoss WS, I'm getting some errors on the response. I know it's something related to my WSDL, and SOAP response. So I was hopping someone could assist me:
WSDL | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | <wsdl:definitions | xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" | xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" | xmlns:xsd="http://www.w3.org/2001/XMLSchema" | | xmlns:sys="http://www.acme.com/schemas/sys" | targetNamespace="http://www.acme.com/sys/definitions" | xmlns:tns="http://www.acme.com/sys/definitions"> | <wsdl:types> | <xsd:schema> | <xsd:import namespace="http://www.acme.com/schemas/sys" schemaLocation="Command.xsd" id="sys"/> | </xsd:schema> | | </wsdl:types> | | <wsdl:message name="CommandRequest"> | <wsdl:part name="parameters" element="sys:anyCommand"></wsdl:part> | </wsdl:message> | <wsdl:message name="CommandResponse"> | <wsdl:part name="return" element="sys:CommandResponse"></wsdl:part> | </wsdl:message> | | <wsdl:portType name="CommandProcessorPortType"> | <wsdl:operation name="process"> | <wsdl:input message="tns:CommandRequest" name="CommandRequestInput"></wsdl:input> | <wsdl:output message="tns:CommandResponse" name="CommandResponseOutput"></wsdl:output> | </wsdl:operation> | </wsdl:portType> | | <wsdl:binding name="CommandProcessorBinding" type="tns:CommandProcessorPortType"> | <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> | <wsdl:operation name="process"> | <soap:operation soapAction="http://www.acme.com/sys/CommandRequest"/> | <wsdl:input> | <soap:body use="literal"/> | </wsdl:input> | <wsdl:output> | <soap:body use="literal"/> | </wsdl:output> | </wsdl:operation> | </wsdl:binding> | | <wsdl:service name="CommandProcessorService"> | <wsdl:port name="CommandProcessorPort" binding="tns:CommandProcessorBinding"> | <soap:address location="http://localhost:8080/CommandProcessorService"/> | </wsdl:port> | </wsdl:service> | </wsdl:definitions> | | Command.xsd | <?xml version="1.0" encoding="UTF-8"?> | <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" | targetNamespace="http://www.acme.com/schemas/sys" | xmlns:sys="http://www.acme.com/schemas/sys" | elementFormDefault="qualified"> | | <xsd:element name="anyCommand"> | <xsd:complexType> | <xsd:sequence> | <xsd:any minOccurs="1"></xsd:any> | </xsd:sequence> | </xsd:complexType> | </xsd:element> | | <xsd:element name="CommandResponse"> | <xsd:complexType> | <xsd:sequence> | <xsd:element name="return" type="sys:ResponseCommandType"></xsd:element> | </xsd:sequence> | </xsd:complexType> | </xsd:element> | | | | <xsd:complexType name="ResponseCommandType"> | <xsd:sequence> | <xsd:element name="id" type="xsd:long"></xsd:element> | <xsd:element name="message" type="xsd:string"></xsd:element> | </xsd:sequence> | </xsd:complexType> | </xsd:schema> | My Provider | | @Local | @Stateless | @WebServiceProvider(wsdlLocation="META-INF/wsdl/CommandProcessor.wsdl", | targetNamespace="http://www.acme.com/sys/definitions", | serviceName="CommandProcessorService", | portName="CommandProcessorPort") | @ServiceMode(value=Service.Mode.PAYLOAD) | public class CommandProcessor implements Provider<Source> { | Source returnMessage; | public Source invoke(Source messge) { | | DOMSource domSource = null; | | try { | Transformer transformer = TransformerFactory.newInstance().newTransformer(); | transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); | transformer.setOutputProperty(OutputKeys.METHOD, "xml"); | OutputStream out = new ByteArrayOutputStream(); | StreamResult streamResult = new StreamResult(); | streamResult.setOutputStream(out); | transformer.transform(messge, streamResult); | String xmlReq = streamResult.getOutputStream().toString(); | System.out.println(xmlReq); | domSource = new DOMSource(createResponseContent()); | transformer.transform(domSource, streamResult); | xmlReq = streamResult.getOutputStream().toString(); | System.out.println(xmlReq); | } catch (Exception e) { | // TODO Auto-generated catch block | e.printStackTrace(); | } | return domSource; | } | | private Document createResponseContent() throws Exception{ | DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); | dbf.setNamespaceAware(true); | DocumentBuilder db = dbf.newDocumentBuilder(); | Document doc = db.newDocument(); | Element responseCommand = doc.createElementNS("http://www.acme.com/sys/definitions", "sys:CommandResponse"); | Element ret = doc.createElement("return"); | Element id = doc.createElement("id"); | id.appendChild(doc.createTextNode("1")); | Element message = doc.createElement("message"); | message.appendChild(doc.createTextNode("comando recebido")); | ret.appendChild(id); | ret.appendChild(message); | responseCommand.appendChild(ret); | doc.appendChild(responseCommand); | return doc; | } | | } | Well, first, when I run ws-provide it throws a lot of warnings on the console, but it seems that all artifacts are created (Port,Service,Bindings,ObjectFactory). Ok, running using soap ui: | Request: | | <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.acme.com/schemas/sys"> | <soapenv:Header/> | <soapenv:Body> | <csm:anyCommand> | <asteriskCommand> | <voip>true</voip> | </asteriskCommand> | </csm:anyCommand> | </soapenv:Body> | </soapenv:Envelope> | | Response: | | <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> | <env:Header/> | <env:Body> | <sys:CommandResponse xmlns:sys="null"> | <return> | <id>1</id> | <message>comando recebido</message> | </return> | </csm:CommandResponse> | </env:Body> | </env:Envelope> | Now, the odd thing, is that the xmlns:sys is null, when I print it on the serverside it displays that the xmlns:sys is pointing to the namespace. So I run this test with the generated client proxy, and I get an error: Caused by: org.jboss.ws.WSException: Cannot find child element: {http://www.acme.com/schemas/sys}CommandResponse I really don't know if this is caused because the xmlns is being returned null, and if so, why? Or did I messed the whole doc/literal wrapped/bare style? I was thinking that I was using bare style :) Any help would be great :) Regards View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4091226#4091226 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4091226 _______________________________________________ jboss-user mailing list [email protected] https://lists.jboss.org/mailman/listinfo/jboss-user
