diff --git a/pom.xml b/pom.xml index c54695a86897cff1c8b1592d380df6ff27064195..46e3a5e9acb88bae5320a9528bbf34c649daac3a 100644 --- a/pom.xml +++ b/pom.xml @@ -1921,7 +1921,7 @@ <dependency> <groupId>org.openolat</groupId> <artifactId>viterows</artifactId> - <version>9.1.1</version> + <version>9.1.2</version> </dependency> <dependency> <groupId>org.openolat</groupId> diff --git a/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java b/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java index 49067eb5458ceb07e03a83269b883365e579e60c..08893cf590e467082dc07a3539876ccd9ac5efea 100644 --- a/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java +++ b/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java @@ -42,6 +42,7 @@ import javax.activation.FileDataSource; import javax.annotation.PostConstruct; import javax.ws.rs.core.UriBuilder; import javax.xml.soap.SOAPElement; +import javax.xml.soap.SOAPFaultElement; import javax.xml.ws.BindingProvider; import javax.xml.ws.WebServiceException; import javax.xml.ws.handler.Handler; @@ -78,8 +79,6 @@ import org.olat.user.DisplayPortraitManager; import org.olat.user.UserDataDeletable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.w3c.dom.Node; -import org.w3c.dom.Text; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.CompactWriter; @@ -1079,6 +1078,9 @@ public class ViteroManager implements UserDataDeletable { if(StringHelper.containsNonWhitespace(vBooking.getEventName())) { newBooking.setEventname(vBooking.getEventName()); } + if(viteroModule.isInspire()) { + newBooking.setInspire(Boolean.TRUE); + } createRequest.setBooking(newBooking); CreateBookingResponse response = bookingWs.createBooking(createRequest); @@ -1483,45 +1485,44 @@ public class ViteroManager implements UserDataDeletable { //Utilities private final ErrorCode handleAxisFault(final SOAPFaultException f) throws VmsNotAvailableException { - if(f.getFault() != null) { - String errorCode = extractErrorCode(f.getFault()); - if(StringHelper.isLong(errorCode)) { - int code = Integer.parseInt(errorCode); - return ErrorCode.find(code); - } - return ErrorCode.unkown; - } else if (f.getCause() instanceof SocketTimeoutException) { - throw new VmsNotAvailableException(f); + try { + if(f.getFault() != null) { + ErrorCode errorCode = extractErrorCode(f.getFault()); + if(errorCode != null) { + return errorCode; + } + return ErrorCode.unkown; + } else if (f.getCause() instanceof SocketTimeoutException) { + throw new VmsNotAvailableException(f); + } + } catch (Exception e) { + log.error("Cannot extract error", f); } return ErrorCode.unkown; } - private String extractErrorCode(SOAPElement element) { + private ErrorCode extractErrorCode(SOAPElement element) { if(element == null) return null; - for(Iterator<?> it=element.getChildElements(); it.hasNext(); ) { - Object childElement = it.next(); - if(childElement instanceof SOAPElement) { - SOAPElement soapElement = (SOAPElement)childElement; - String nodeName = soapElement.getNodeName(); - if("errorCode".equals(nodeName)) { - return extractText(soapElement); - } else { - String code = extractErrorCode(soapElement); - if(code != null) { - return code; - } + try { + ErrorCode[] codes = ErrorCode.values(); + int numOfErrorCode = codes.length; + for(Iterator<?> it=element.getChildElements(); it.hasNext(); ) { + Object childElement = it.next(); + if(childElement instanceof SOAPFaultElement) { + SOAPFaultElement fault = (SOAPFaultElement)childElement; + String fContent = fault.getTextContent(); + if(StringHelper.containsNonWhitespace(fContent) && Character.isDigit(fContent.charAt(fContent.length() - 1))) { + for(int i=numOfErrorCode; i-->0; ) { + if(fContent.endsWith(codes[i].codeString())) { + return codes[i]; + } + } + } } } - } - return null; - } - - private String extractText(SOAPElement errorCodeEl) { - for(Node node=errorCodeEl.getFirstChild(); node != null; node=node.getNextSibling()) { - if(node instanceof Text && StringHelper.containsNonWhitespace(node.getNodeValue())) { - return node.getNodeValue(); - } + } catch (Exception e) { + log.error("", e); } return null; } diff --git a/src/main/java/org/olat/modules/vitero/model/ErrorCode.java b/src/main/java/org/olat/modules/vitero/model/ErrorCode.java index 1438efae6926a1b958a466a7a82f91296a5c7361..682b110b31bd51904c94d56141b90e605351784c 100644 --- a/src/main/java/org/olat/modules/vitero/model/ErrorCode.java +++ b/src/main/java/org/olat/modules/vitero/model/ErrorCode.java @@ -50,16 +50,22 @@ public enum ErrorCode { private final int code; private final String i18nKey; + private final String codeString; private ErrorCode(int code, String i18nKey) { this.code = code; this.i18nKey = i18nKey; + codeString = Integer.toString(code); } public int code() { return code; } + public String codeString() { + return codeString; + } + public String i18nKey() { return i18nKey; }