io.github.factoryfx.soap.WebServiceCallResult Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of soapFactory Show documentation
Show all versions of soapFactory Show documentation
factoryfx dependency injection framework
package io.github.factoryfx.soap;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.xml.namespace.QName;
import jakarta.xml.bind.JAXBElement;
import jakarta.xml.ws.WebFault;
public class WebServiceCallResult {
public final Object result;
public final Exception fault;
private WebServiceCallResult(Object result) {
this.result = result;
this.fault = null;
}
private WebServiceCallResult(Exception ex) {
this.result = null;
this.fault = ex;
}
@SuppressWarnings("unchecked")
public JAXBElement> createFaultDetail() {
try {
WebFault faultAnnotation = fault.getClass().getAnnotation(WebFault.class);
if (faultAnnotation == null) {
throw new RuntimeException("Declared exception of type '"+fault.getClass().getName()+"' does not have an WebFault annotation. Unable to convert it to an xml element thus.");
}
Method getFaultInfo;
try {
getFaultInfo = fault.getClass().getMethod("getFaultInfo");
} catch ( NoSuchMethodException e){
throw new RuntimeException("Declared exception of type '"+fault.getClass().getName()+"' does not have a getFaultInfo() method. Unable to create a soap fault thus.",e);
}
Object faultInfo = getFaultInfo.invoke(fault);
QName faultCode = new QName(faultAnnotation.targetNamespace(), faultAnnotation.name());
JAXBElement result = new JAXBElement(faultCode,getFaultInfo.getReturnType(),faultInfo);
result.setNil(faultInfo == null);
return result;
} catch (InvocationTargetException | IllegalAccessException e) {
throw new RuntimeException("Cannot convert declared Exception to Webfault. Please check @WebFault annotation",e);
}
}
public static WebServiceCallResult fromResult(Object result) {
return new WebServiceCallResult(result);
}
public static WebServiceCallResult fromFault(Exception fault) {
return new WebServiceCallResult(fault);
}
}