diff --git a/pom.xml b/pom.xml
index 63177f5..114bbbb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,11 +63,36 @@
com.google.inject
guice
+
+ com.sun.xml.messaging.saaj
+ saaj-impl
+ 3.0.1
+
+
+ jakarta.annotation
+ jakarta.annotation-api
+ 2.1.1
+
jakarta.servlet
jakarta.servlet-api
provided
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+ 3.0.1
+
+
+ jakarta.xml.soap
+ jakarta.xml.soap-api
+ 3.0.1
+
+
+ jakarta.xml.ws
+ jakarta.xml.ws-api
+ 3.0.1
+
javax.inject
javax.inject
@@ -77,11 +102,36 @@
joda-time
provided
+
+ org.apache.cxf
+ cxf-core
+ 4.0.3
+
+
+ org.apache.cxf
+ cxf-rt-bindings-soap
+ 4.0.3
+
+
+ org.apache.cxf
+ cxf-rt-frontend-jaxws
+ 4.0.3
+
+
+ org.apache.cxf
+ cxf-rt-transports-http
+ 4.0.3
+
org.apache.felix
org.apache.felix.framework
provided
+
+ org.glassfish.jaxb
+ jaxb-runtime
+ 3.0.1
+
org.jooby
jooby
@@ -148,6 +198,26 @@
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+
+
+ package
+
+ shade
+
+
+
+
+ META-INF/cxf/bus-extensions.txt
+
+
+
+
+
+
org.apache.felix
maven-bundle-plugin
diff --git a/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java b/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java
index 1f3ca97..86bc24e 100644
--- a/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java
+++ b/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldActivator.java
@@ -19,12 +19,15 @@
package org.killbill.billing.plugin.helloworld;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.util.Hashtable;
+import java.util.Map;
import java.util.Properties;
-
import javax.servlet.Servlet;
import javax.servlet.http.HttpServlet;
-
+import javax.xml.namespace.QName;
+import org.killbill.billing.invoice.plugin.api.InvoiceFormatterFactory;
import org.killbill.billing.invoice.plugin.api.InvoicePluginApi;
import org.killbill.billing.osgi.api.Healthcheck;
import org.killbill.billing.osgi.api.OSGIPluginProperties;
@@ -38,7 +41,16 @@
import org.killbill.billing.plugin.core.resources.jooby.PluginAppBuilder;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
-import org.killbill.billing.invoice.plugin.api.InvoiceFormatterFactory;
+import jakarta.xml.soap.MessageFactory;
+import jakarta.xml.soap.SOAPBody;
+import jakarta.xml.soap.SOAPElement;
+import jakarta.xml.soap.SOAPEnvelope;
+import jakarta.xml.soap.SOAPException;
+import jakarta.xml.soap.SOAPMessage;
+import jakarta.xml.soap.SOAPPart;
+import jakarta.xml.ws.Dispatch;
+import jakarta.xml.ws.Service;
+import jakarta.xml.ws.soap.SOAPBinding;
public class HelloWorldActivator extends KillbillActivatorBase {
@@ -99,6 +111,40 @@ public void start(final BundleContext context) throws Exception {
registerServlet(context, httpServlet);
registerHandlers();
+
+ final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+ try {
+ soap();
+ } finally {
+ Thread.currentThread().setContextClassLoader(contextClassLoader);
+ }
+ }
+
+ private void soap() throws SOAPException, IOException {
+ String endpointAddress = "http://www.dneonline.com/calculator.asmx";
+ MessageFactory factory = MessageFactory.newInstance();
+ SOAPMessage request = factory.createMessage();
+ SOAPPart soapPart = request.getSOAPPart();
+ SOAPEnvelope envelope = soapPart.getEnvelope();
+ SOAPBody body = envelope.getBody();
+ SOAPElement operation = body.addChildElement("Add", "", "http://tempuri.org/");
+ operation.addChildElement("intA").addTextNode("5");
+ operation.addChildElement("intB").addTextNode("7");
+ request.saveChanges();
+ QName serviceName = new QName("http://tempuri.org/", "Calculator");
+ QName portName = new QName("http://tempuri.org/", "CalculatorSoap");
+ Service service = Service.create(serviceName);
+ service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
+ Dispatch dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);
+ Map rc = dispatch.getRequestContext();
+ rc.put(jakarta.xml.ws.BindingProvider.SOAPACTION_USE_PROPERTY, true);
+ rc.put(jakarta.xml.ws.BindingProvider.SOAPACTION_URI_PROPERTY, "\"http://tempuri.org/Add\"");
+ System.out.println("Sending 'Add' request to the public Calculator service...");
+ SOAPMessage response = dispatch.invoke(request);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ response.writeTo(out);
+ System.out.println("\nSOAP Response:\n" + new String(out.toByteArray()));
}
@Override