You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2015/10/13 21:31:47 UTC
svn commit: r1708491 - in
/webservices/axiom/experimental/axiom-spring-integration: ./
src/main/java/org/apache/axiom/spring/integration/
src/main/java/org/apache/axiom/spring/integration/config/
src/main/resources/org/apache/axiom/spring/integration/c...
Author: veithen
Date: Tue Oct 13 19:31:46 2015
New Revision: 1708491
URL: http://svn.apache.org/viewvc?rev=1708491&view=rev
Log:
Configure SOAP version from WSDL.
Added:
webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/WSDLUtil.java (with props)
webservices/axiom/experimental/axiom-spring-integration/src/test/resources/log4j2-test.xml (with props)
Modified:
webservices/axiom/experimental/axiom-spring-integration/pom.xml
webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/WebServiceOutboundGateway.java
webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/config/WebServiceOutboundGatewayParser.java
webservices/axiom/experimental/axiom-spring-integration/src/main/resources/org/apache/axiom/spring/integration/config/schema.xsd
webservices/axiom/experimental/axiom-spring-integration/src/test/resources/org/apache/axiom/spring/integration/mtom-client-context.xml
Modified: webservices/axiom/experimental/axiom-spring-integration/pom.xml
URL: http://svn.apache.org/viewvc/webservices/axiom/experimental/axiom-spring-integration/pom.xml?rev=1708491&r1=1708490&r2=1708491&view=diff
==============================================================================
--- webservices/axiom/experimental/axiom-spring-integration/pom.xml (original)
+++ webservices/axiom/experimental/axiom-spring-integration/pom.xml Tue Oct 13 19:31:46 2015
@@ -50,6 +50,11 @@
<scope>runtime</scope>
</dependency>
<dependency>
+ <groupId>wsdl4j</groupId>
+ <artifactId>wsdl4j</artifactId>
+ <version>1.6.3</version>
+ </dependency>
+ <dependency>
<groupId>com.google.truth</groupId>
<artifactId>truth</artifactId>
<scope>test</scope>
@@ -75,6 +80,16 @@
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-jcl</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
Added: webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/WSDLUtil.java
URL: http://svn.apache.org/viewvc/webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/WSDLUtil.java?rev=1708491&view=auto
==============================================================================
--- webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/WSDLUtil.java (added)
+++ webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/WSDLUtil.java Tue Oct 13 19:31:46 2015
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axiom.spring.integration;
+
+import java.util.Arrays;
+import java.util.List;
+
+import javax.wsdl.extensions.ElementExtensible;
+import javax.wsdl.extensions.ExtensibilityElement;
+
+final class WSDLUtil {
+ private WSDLUtil() {}
+
+ static ExtensibilityElement getExtensibilityElement(ElementExtensible element, Class<? extends ExtensibilityElement>... types) {
+ @SuppressWarnings("unchecked")
+ List<ExtensibilityElement> extensions = element.getExtensibilityElements();
+ ExtensibilityElement extension = null;
+ for (ExtensibilityElement candidate : extensions) {
+ for (Class<? extends ExtensibilityElement> type : types) {
+ if (type.isInstance(candidate)) {
+ if (extension == null) {
+ extension = type.cast(candidate);
+ } else {
+ throw new IllegalArgumentException("Found multiple extensions matching " + Arrays.asList(types));
+ }
+ break;
+ }
+ }
+ }
+ return extension;
+ }
+}
Propchange: webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/WSDLUtil.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/WebServiceOutboundGateway.java
URL: http://svn.apache.org/viewvc/webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/WebServiceOutboundGateway.java?rev=1708491&r1=1708490&r2=1708491&view=diff
==============================================================================
--- webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/WebServiceOutboundGateway.java (original)
+++ webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/WebServiceOutboundGateway.java Tue Oct 13 19:31:46 2015
@@ -23,7 +23,17 @@ import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.ParseException;
+import java.util.Map;
+import javax.wsdl.Binding;
+import javax.wsdl.Definition;
+import javax.wsdl.WSDLException;
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.extensions.soap.SOAPBinding;
+import javax.wsdl.extensions.soap12.SOAP12Binding;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLReader;
+import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.stax.StAXSource;
@@ -35,11 +45,15 @@ import org.apache.axiom.om.OMAbstractFac
import org.apache.axiom.om.OMMetaFactory;
import org.apache.axiom.om.OMOutputFormat;
import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.soap.SOAP11Version;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.SOAPMessage;
import org.apache.axiom.soap.SOAPModelBuilder;
import org.apache.axiom.util.stax.xop.XOPEncodedStream;
import org.apache.axiom.util.stax.xop.XOPUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.core.io.Resource;
import org.springframework.integration.handler.AbstractReplyProducingMessageHandler;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageDeliveryException;
@@ -48,27 +62,55 @@ import org.springframework.oxm.Unmarshal
import org.springframework.oxm.mime.MimeContainer;
import org.springframework.oxm.mime.MimeMarshaller;
import org.springframework.oxm.mime.MimeUnmarshaller;
+import org.springframework.util.Assert;
public final class WebServiceOutboundGateway extends AbstractReplyProducingMessageHandler {
+ private static final Log log = LogFactory.getLog(WebServiceOutboundGateway.class);
+
private final OMMetaFactory metaFactory = OMAbstractFactory.getMetaFactory();
- private boolean useSOAP12; // TODO: find better convention
private final URL url;
+ private final Resource wsdlResource;
private final Marshaller marshaller;
private final Unmarshaller unmarshaller;
private SOAPFactory soapFactory;
- public WebServiceOutboundGateway(URL url, Marshaller marshaller, Unmarshaller unmarshaller) {
+ public WebServiceOutboundGateway(URL url, Resource wsdlResource, Marshaller marshaller, Unmarshaller unmarshaller) {
this.url = url;
+ this.wsdlResource = wsdlResource;
this.marshaller = marshaller;
this.unmarshaller = unmarshaller;
}
- public void setUseSOAP12(boolean useSOAP12) {
- this.useSOAP12 = useSOAP12;
- }
@Override
protected void doInit() {
- soapFactory = useSOAP12 ? metaFactory.getSOAP12Factory() : metaFactory.getSOAP11Factory();
+ try {
+ WSDLReader wsdlReader = WSDLFactory.newInstance().newWSDLReader();
+ Definition definition = wsdlReader.readWSDL(wsdlResource.getURL().toString());
+ Binding binding;
+ @SuppressWarnings("unchecked")
+ Map<QName,Binding> bindings = definition.getAllBindings();
+ if (bindings.size() == 1) {
+ binding = bindings.values().iterator().next();
+ } else {
+ // TODO
+ throw new Error();
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("Using binding " + binding.getQName());
+ }
+ ExtensibilityElement soapBinding = WSDLUtil.getExtensibilityElement(binding, SOAPBinding.class, SOAP12Binding.class);
+ Assert.notNull(soapBinding, "No suitable SOAP binding found");
+ if (soapBinding instanceof SOAPBinding) {
+ log.debug("Using SOAP 1.1");
+ soapFactory = metaFactory.getSOAP11Factory();
+ } else {
+ log.debug("Using SOAP 1.2");
+ soapFactory = metaFactory.getSOAP12Factory();
+ }
+ } catch (WSDLException | IOException ex) {
+ // TODO
+ throw new RuntimeException(ex);
+ }
}
@Override
@@ -77,7 +119,7 @@ public final class WebServiceOutboundGat
soapMessage.getSOAPEnvelope().getBody().addChild(soapFactory.createOMElement(
new MarshallerOMDataSource(marshaller, requestMessage.getPayload())));
OMOutputFormat format = new OMOutputFormat();
- format.setSOAP11(!useSOAP12);
+ format.setSOAP11(soapFactory.getSOAPVersion() == SOAP11Version.getSingleton());
try {
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setDoOutput(true);
Modified: webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/config/WebServiceOutboundGatewayParser.java
URL: http://svn.apache.org/viewvc/webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/config/WebServiceOutboundGatewayParser.java?rev=1708491&r1=1708490&r2=1708491&view=diff
==============================================================================
--- webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/config/WebServiceOutboundGatewayParser.java (original)
+++ webservices/axiom/experimental/axiom-spring-integration/src/main/java/org/apache/axiom/spring/integration/config/WebServiceOutboundGatewayParser.java Tue Oct 13 19:31:46 2015
@@ -32,6 +32,7 @@ public final class WebServiceOutboundGat
@Override
protected void postProcessGateway(BeanDefinitionBuilder builder, Element element, ParserContext parserContext) {
+ builder.addConstructorArgValue(element.getAttribute("wsdl"));
builder.addConstructorArgReference(element.getAttribute("marshaller"));
builder.addConstructorArgReference(element.getAttribute("unmarshaller"));
}
Modified: webservices/axiom/experimental/axiom-spring-integration/src/main/resources/org/apache/axiom/spring/integration/config/schema.xsd
URL: http://svn.apache.org/viewvc/webservices/axiom/experimental/axiom-spring-integration/src/main/resources/org/apache/axiom/spring/integration/config/schema.xsd?rev=1708491&r1=1708490&r2=1708491&view=diff
==============================================================================
--- webservices/axiom/experimental/axiom-spring-integration/src/main/resources/org/apache/axiom/spring/integration/config/schema.xsd (original)
+++ webservices/axiom/experimental/axiom-spring-integration/src/main/resources/org/apache/axiom/spring/integration/config/schema.xsd Tue Oct 13 19:31:46 2015
@@ -39,6 +39,11 @@
<xsd:documentation>The Destination URL for this Web Service Gateway.</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
+ <xsd:attribute name="wsdl" type="xsd:string" use="required">
+ <xsd:annotation>
+ <xsd:documentation>The location of the WSDL.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
<xsd:attribute name="marshaller" type="xsd:string" use="required">
<xsd:annotation>
<xsd:documentation>Reference to a Spring OXM Mashaller.</xsd:documentation>
Added: webservices/axiom/experimental/axiom-spring-integration/src/test/resources/log4j2-test.xml
URL: http://svn.apache.org/viewvc/webservices/axiom/experimental/axiom-spring-integration/src/test/resources/log4j2-test.xml?rev=1708491&view=auto
==============================================================================
--- webservices/axiom/experimental/axiom-spring-integration/src/test/resources/log4j2-test.xml (added)
+++ webservices/axiom/experimental/axiom-spring-integration/src/test/resources/log4j2-test.xml Tue Oct 13 19:31:46 2015
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+<Configuration>
+ <Appenders>
+ <Console name="stdout" target="SYSTEM_OUT">
+ <PatternLayout pattern="%-6r %-5p %-8t [%c{1}] %m%n"/>
+ </Console>
+ </Appenders>
+ <Loggers>
+ <Logger name="org.apache.axiom" level="debug"/>
+ <Logger name="org.springframework.ws" level="warn"/>
+ <Root level="warn">
+ <AppenderRef ref="stdout"/>
+ </Root>
+ </Loggers>
+</Configuration>
\ No newline at end of file
Propchange: webservices/axiom/experimental/axiom-spring-integration/src/test/resources/log4j2-test.xml
------------------------------------------------------------------------------
svn:eol-style = native
Modified: webservices/axiom/experimental/axiom-spring-integration/src/test/resources/org/apache/axiom/spring/integration/mtom-client-context.xml
URL: http://svn.apache.org/viewvc/webservices/axiom/experimental/axiom-spring-integration/src/test/resources/org/apache/axiom/spring/integration/mtom-client-context.xml?rev=1708491&r1=1708490&r2=1708491&view=diff
==============================================================================
--- webservices/axiom/experimental/axiom-spring-integration/src/test/resources/org/apache/axiom/spring/integration/mtom-client-context.xml (original)
+++ webservices/axiom/experimental/axiom-spring-integration/src/test/resources/org/apache/axiom/spring/integration/mtom-client-context.xml Tue Oct 13 19:31:46 2015
@@ -38,6 +38,6 @@
</property>
<property name="mtomEnabled" value="true"/>
</bean>
- <axiom:ws-outbound-gateway request-channel="request" url="http://localhost:${port}/mtom"
+ <axiom:ws-outbound-gateway request-channel="request" wsdl="http://localhost:${port}/mtom?wsdl" url="http://localhost:${port}/mtom"
marshaller="marshaller" unmarshaller="marshaller"/>
</beans>