Le 13/11/2014 10:52, Gianluca84 a écrit :
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:
Yes this happens randomly, though not recently. Do you use the trunk HEAD?
Jacques
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.