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