Launched test-result ant target, test results: Tests 321 Failures 1
Errors 0 Skipped 0 Success rate 99.69% Time 1326.873 The failed one: basetests testBasicDisk Failure is-empty junit.framework.AssertionFailedError: is-empty at org.ofbiz.base.util.cache.test.UtilCacheTests.assertHasSingleKey(UtilCacheTests.java:225) at org.ofbiz.base.util.cache.test.UtilCacheTests.basicTest(UtilCacheTests.java:301) at org.ofbiz.base.util.cache.test.UtilCacheTests.testBasicDisk(UtilCacheTests.java:321) at org.ofbiz.testtools.TestRunContainer.start(TestRunContainer.java:147) at org.ofbiz.base.container.ContainerLoader.start(ContainerLoader.java:235) at org.ofbiz.base.start.Start.startStartLoaders(Start.java:353) at org.ofbiz.base.start.Start.start(Start.java:379) at org.ofbiz.base.start.Start.main(Start.java:135) I assume that failure is not related to my modifications. This is the patch that includes the modifications I made for the sendError too: Index: framework/webapp/src/org/ofbiz/webapp/event/SOAPEventHandler.java =================================================================== --- framework/webapp/src/org/ofbiz/webapp/event/SOAPEventHandler.java (revisione 1638710) +++ framework/webapp/src/org/ofbiz/webapp/event/SOAPEventHandler.java (copia locale) @@ -20,7 +20,6 @@ import java.io.IOException; import java.io.OutputStream; -import java.io.StringReader; import java.io.Writer; import java.util.Iterator; import java.util.List; @@ -30,34 +29,37 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.wsdl.WSDLException; -import javax.xml.namespace.QName; -import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamReader; import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.om.OMAttribute; import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.impl.builder.StAXOMBuilder; +import org.apache.axiom.om.OMNamespace; import org.apache.axiom.om.util.StAXUtils; import org.apache.axiom.soap.SOAPBody; import org.apache.axiom.soap.SOAPEnvelope; import org.apache.axiom.soap.SOAPFactory; import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder; +import org.apache.axis2.util.XMLUtils; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilProperties; import org.ofbiz.base.util.UtilXml; import org.ofbiz.entity.Delegator; +import org.ofbiz.entity.serialize.SerializeException; +import org.ofbiz.entity.serialize.XmlSerializer; import org.ofbiz.service.DispatchContext; import org.ofbiz.service.GenericServiceException; import org.ofbiz.service.LocalDispatcher; import org.ofbiz.service.ModelService; import org.ofbiz.service.ServiceUtil; import org.ofbiz.service.engine.SoapSerializer; +import org.ofbiz.webapp.control.ConfigXMLReader; import org.ofbiz.webapp.control.ConfigXMLReader.Event; import org.ofbiz.webapp.control.ConfigXMLReader.RequestMap; import org.ofbiz.webapp.control.RequestHandler; +import org.w3c.dom.DOMException; import org.w3c.dom.Document; +import org.w3c.dom.Element; /** * SOAPEventHandler - SOAP Event Handler implementation @@ -230,33 +232,46 @@ throw new EventHandlerException("One service call expected, but received: " + numServiceCallRequests.toString()); } } + + private OMElement buildResponseOMElement(String serviceName, SOAPFactory factory, Object serviceResults) throws DOMException, SerializeException, Exception{ + Document document = UtilXml.makeEmptyXmlDocument(serviceName); + Element rootElement = document.getDocumentElement(); + rootElement.appendChild(XmlSerializer.serializeSingle(serviceResults, document)); + OMNamespace namespace = factory.createOMNamespace(ModelService.TNS,"tns"); + OMElement rootOM=XMLUtils.toOM(document.getDocumentElement(), true); + rootOM.setNamespaceWithNoFindInCurrentScope(namespace); + + enforceNameSpace(rootOM.getFirstElement(), namespace); + return rootOM; + } + + private void enforceNameSpace(OMElement element, OMNamespace namespace){ + @SuppressWarnings("unchecked") + Iterator<OMElement> allChildren = (Iterator<OMElement>)element.getChildElements(); + if(allChildren!=null){ + while (allChildren.hasNext()) { + OMElement el = (OMElement) allChildren.next(); + el.setNamespaceWithNoFindInCurrentScope(namespace); + enforceNameSpace(el, namespace); + } + } + } + private void createAndSendSOAPResponse(Map<String, Object> serviceResults, String serviceName, HttpServletResponse response) throws EventHandlerException { try { // setup the response Debug.logVerbose("[EventHandler] : Setting up response message", module); - String xmlResults = SoapSerializer.serialize(serviceResults); - //Debug.logInfo("xmlResults ==================" + xmlResults, module); - XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(xmlResults)); - StAXOMBuilder resultsBuilder = new StAXOMBuilder(reader); - OMElement resultSer = resultsBuilder.getDocumentElement(); // create the response soap SOAPFactory factory = OMAbstractFactory.getSOAP11Factory(); SOAPEnvelope resEnv = factory.createSOAPEnvelope(); SOAPBody resBody = factory.createSOAPBody(); - OMElement resService = factory.createOMElement(new QName(serviceName + "Response")); - resService.addChild(resultSer.getFirstElement()); + OMElement resService=buildResponseOMElement(serviceName + "Response",factory, serviceResults); + //Debug.logInfo("resService ==================" + resService, module); resBody.addChild(resService); resEnv.addChild(resBody); - // The declareDefaultNamespace method doesn't work see (https://issues.apache.org/jira/browse/AXIS2-3156) - // so the following doesn't work: - // resService.declareDefaultNamespace(ModelService.TNS); - // instead, create the xmlns attribute directly: - OMAttribute defaultNS = factory.createOMAttribute("xmlns", null, ModelService.TNS); - resService.addAttribute(defaultNS); - // log the response message if (Debug.verboseOn()) { try { @@ -285,27 +300,15 @@ try { // setup the response res.setContentType("text/xml"); - String xmlResults= SoapSerializer.serialize(object); - XMLStreamReader xmlReader = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(xmlResults)); - StAXOMBuilder resultsBuilder = new StAXOMBuilder(xmlReader); - OMElement resultSer = resultsBuilder.getDocumentElement(); - // create the response soap SOAPFactory factory = OMAbstractFactory.getSOAP11Factory(); SOAPEnvelope resEnv = factory.createSOAPEnvelope(); SOAPBody resBody = factory.createSOAPBody(); - OMElement errMsg = factory.createOMElement(new QName((serviceName != null ? serviceName : "") + "Response")); - errMsg.addChild(resultSer.getFirstElement()); - resBody.addChild(errMsg); + OMElement resService=buildResponseOMElement(serviceName + "Response",factory, object); + //Debug.logInfo("resService ==================" + resService, module); + resBody.addChild(resService); resEnv.addChild(resBody); - // The declareDefaultNamespace method doesn't work see (https://issues.apache.org/jira/browse/AXIS2-3156) - // so the following doesn't work: - // resService.declareDefaultNamespace(ModelService.TNS); - // instead, create the xmlns attribute directly: - OMAttribute defaultNS = factory.createOMAttribute("xmlns", null, ModelService.TNS); - errMsg.addAttribute(defaultNS); - // log the response message if (Debug.verboseOn()) { try { -- View this message in context: http://ofbiz.135035.n4.nabble.com/Failed-comunication-between-Axis-server-and-JAX-WSclient-tp4658126p4658146.html Sent from the OFBiz - Dev mailing list archive at Nabble.com.