Author: mriou
Date: Mon May 5 08:47:57 2008
New Revision: 653510
URL: http://svn.apache.org/viewvc?rev=653510&view=rev
Log:
ODE-274 ODE-278 support PUT and DELETE methods, urlReplacement for all methods
Added:
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingValidatorTest.java
- copied, changed from r652724,
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/HttpBindingValidatorTest.java
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/util/UrlReplacementTransformerTest.java
- copied, changed from r652724,
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/UrlReplacementTransformerTest.java
Removed:
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/HttpBindingValidatorTest.java
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/UrlReplacementTransformerTest.java
Modified:
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/ArithmeticsJettyWrapper.java
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingTest.java
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/Arithmetics.wsdl
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/deploy.xml
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/http-binding-test.bpel
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/testRequest.soap
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpBindingValidator.java
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpMethodBuilder.java
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/Messages.java
ode/branches/APACHE_ODE_1.1/axis2/src/test/resources/http-binding-validator.wsdl
Modified:
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/ArithmeticsJettyWrapper.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/ArithmeticsJettyWrapper.java?rev=653510&r1=653509&r2=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/ArithmeticsJettyWrapper.java
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/ArithmeticsJettyWrapper.java
Mon May 5 08:47:57 2008
@@ -80,8 +80,9 @@
String uri = request.getRequestURI();
if ("/HttpBindingTestService/".equals(uri)) {
response.getWriter().println("HttpBindingTestService
ready!");
- } else if (uri.contains("OlaElMundo-GET")) {
- if (!"GET".equalsIgnoreCase(method)) {
+ } else if (uri.contains("OlaElMundo-GET") ||
uri.contains("OlaElMundo-DELETE")) {
+// if (!"GET".equalsIgnoreCase(method)) {
+ if (false) {
response.sendError(405, "Expecting method is GET");
} else {
if (!uri.contains("plus") && !uri.contains("minus")) {
@@ -117,8 +118,9 @@
}
}
}
- } else if (uri.contains("OlaElMundo-POST")) {
- if (!"POST".equalsIgnoreCase(method)) {
+ } else if (uri.contains("OlaElMundo-POST") ||
uri.contains("OlaElMundo-PUT")) {
+// if (!"POST".equalsIgnoreCase(method)) {
+ if (false) {
response.sendError(405, "Expecting method is POST");
return;
} else {
Modified:
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingTest.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingTest.java?rev=653510&r1=653509&r2=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingTest.java
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingTest.java
Mon May 5 08:47:57 2008
@@ -11,9 +11,9 @@
* <p/>
* From a "business" standpoint:<br/>
* Let N be the input number, stored in the testRequest1.soap file<br/>
- * This test will compute the Sum of the first (N + 300) positive integers.
+ * This test will compute the Sum of the first (N + 5) positive integers.
* <p/>
- * If N=10, the expected result is 310*(310+1)/2 = 48205
+ * If N=10, the expected result is 15*(15+1)/2 = 120
*
* @author <a href="mailto:[EMAIL PROTECTED]">Alexis Midon</a>
*/
@@ -52,11 +52,11 @@
try {
String response =
server.sendRequestFile("http://localhost:8080/processes/helloWorld",
bundleName, "testRequest.soap");
- int valueInSoapRequest = 10;
- int n = 300 + valueInSoapRequest;
+ int valueInSoapRequest = 100;
+ int n = 5 + valueInSoapRequest;
assertTrue(response.indexOf(String.valueOf(n * (n + 1) / 2)) >= 0);
} finally {
server.undeployProcess(bundleName);
}
}
-}
\ No newline at end of file
+}
Modified:
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/Arithmetics.wsdl
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/Arithmetics.wsdl?rev=653510&r1=653509&r2=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/Arithmetics.wsdl
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/Arithmetics.wsdl
Mon May 5 08:47:57 2008
@@ -142,6 +142,52 @@
</wsdl:binding>
+ <wsdl:binding name="OlaElMundoHttpBinding-PUT"
type="tns:OlaElMundoPortType">
+ <http:binding verb="PUT"/>
+ <wsdl:operation name="plus">
+ <http:operation location="plus"/>
+ <wsdl:input>
+ <mime:content type="application/x-www-form-urlencoded"/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="result"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="minus">
+ <http:operation location="minus"/>
+ <wsdl:input>
+ <http:urlEncoded/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="result"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+
+
+ <wsdl:binding name="OlaElMundoHttpBinding-DELETE"
type="tns:OlaElMundoPortType">
+ <http:binding verb="DELETE"/>
+ <wsdl:operation name="plus">
+ <http:operation location="plus/(left):(right)"/>
+ <wsdl:input>
+ <http:urlReplacement/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="result"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="minus">
+ <http:operation location="minus"/>
+ <wsdl:input>
+ <http:urlEncoded/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="result"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+
+
<wsdl:binding name="SalutLaTerreHttpBinding"
type="tns:SalutLaTerrePortType">
<http:binding verb="POST"/>
<wsdl:operation name="addition">
@@ -167,12 +213,16 @@
<!--
6 urls to handle:
- (GET)
http://localhost:8080/HttpBindingTestService/OlaElMundo-GET/plus/(left):(right)
- (GET) http:// ........
/OlaElMundo-GET/minus?left=&right=
- (POST) http:// ........
/OlaElMundo-POST/plus
- (POST) http:// ........
/OlaElMundo-POST/minus
- (POST) http:// ........
/SalutLaTerre/addition
- (POST) http:// ........
/SalutLaTerre/sumOfIntegers
+ (GET)
http://localhost:8080/HttpBindingTestService/OlaElMundo-GET/plus/(left):(right)
+ (GET) http:// ........
/OlaElMundo-GET/minus?left=&right=
+ (DELETE)
http://localhost:8080/HttpBindingTestService/OlaElMundo-DELETE/plus/(left):(right)
+ (DELETE) http:// ........
/OlaElMundo-DELETE/minus?left=&right=
+ (POST) http:// ........
/OlaElMundo-POST/plus
+ (POST) http:// ........
/OlaElMundo-POST/minus
+ (PUT) http:// ........
/OlaElMundo-PUT/plus
+ (PUT) http:// ........
/OlaElMundo-PUT/minus
+ (POST) http:// ........
/SalutLaTerre/addition
+ (POST) http:// ........
/SalutLaTerre/sumOfIntegers
-->
<wsdl:service name="HttpBindingTestService">
<wsdl:port name="OlaElMundo-GET_httpport"
binding="tns:OlaElMundoHttpBinding-GET">
@@ -181,6 +231,12 @@
<wsdl:port name="OlaElMundo-POST_httpport"
binding="tns:OlaElMundoHttpBinding-POST">
<http:address
location="http://localhost:7070/HttpBindingTestService/OlaElMundo-POST"/>
</wsdl:port>
+ <wsdl:port name="OlaElMundo-PUT_httpport"
binding="tns:OlaElMundoHttpBinding-PUT">
+ <http:address
location="http://localhost:7070/HttpBindingTestService/OlaElMundo-PUT"/>
+ </wsdl:port>
+ <wsdl:port name="OlaElMundo-DELETE_httpport"
binding="tns:OlaElMundoHttpBinding-DELETE">
+ <http:address
location="http://localhost:7070/HttpBindingTestService/OlaElMundo-DELETE"/>
+ </wsdl:port>
<wsdl:port name="SalutLaTerre_httpport"
binding="tns:SalutLaTerreHttpBinding">
<http:address
location="http://localhost:7070/HttpBindingTestService/SalutLaTerre"/>
</wsdl:port>
Modified:
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/deploy.xml
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/deploy.xml?rev=653510&r1=653509&r2=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/deploy.xml
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/deploy.xml
Mon May 5 08:47:57 2008
@@ -36,5 +36,11 @@
<invoke partnerLink="olaPostPartnerLink">
<service name="dns:HttpBindingTestService"
port="OlaElMundo-POST_httpport"/>
</invoke>
+ <invoke partnerLink="olaPutPartnerLink">
+ <service name="dns:HttpBindingTestService"
port="OlaElMundo-PUT_httpport"/>
+ </invoke>
+ <invoke partnerLink="olaDeletePartnerLink">
+ <service name="dns:HttpBindingTestService"
port="OlaElMundo-DELETE_httpport"/>
+ </invoke>
</process>
</deploy>
Modified:
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/http-binding-test.bpel
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/http-binding-test.bpel?rev=653510&r1=653509&r2=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/http-binding-test.bpel
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/http-binding-test.bpel
Mon May 5 08:47:57 2008
@@ -39,6 +39,10 @@
partnerLinkType="test:OlaLinkType" partnerRole="ola"/>
<partnerLink name="olaPostPartnerLink"
partnerLinkType="test:OlaLinkType" partnerRole="ola"/>
+ <partnerLink name="olaPutPartnerLink"
+ partnerLinkType="test:OlaLinkType" partnerRole="ola"/>
+ <partnerLink name="olaDeletePartnerLink"
+ partnerLinkType="test:OlaLinkType" partnerRole="ola"/>
</partnerLinks>
<variables>
@@ -55,21 +59,21 @@
<!-- ###################################################### -->
<!-- ###################################################### -->
<!-- let N be the input number -->
- <!-- This sequence will compute the Sum of the first (N + 300) positive
integers -->
+ <!-- This sequence will compute the Sum of the first (N + 5) positive
integers -->
<!-- ###################################################### -->
<!-- ###################################################### -->
<sequence>
<receive name="start" partnerLink="helloPartnerLink"
portType="test:HelloPortType"
operation="hello" variable="inputVar" createInstance="yes"/>
- <!-- Compute r = x + 100 -->
+ <!-- Compute r = x + 1 -->
<assign>
<copy>
<from>$inputVar.TestPart</from>
<to>$operands.left</to>
</copy>
<copy>
- <from>100</from>
+ <from>1</from>
<to>$operands.right</to>
</copy>
</assign>
@@ -77,49 +81,110 @@
<invoke partnerLink="olaGetPartnerLink"
portType="dummy:OlaElMundoPortType"
operation="plus" inputVariable="operands"
outputVariable="result"/>
- <!-- Compute r = r - 200 (= x - 100) -->
+ <!-- Compute r = r - 2 (= x - 1) -->
<assign>
<copy>
<from>$result.result</from>
<to>$operands.left</to>
</copy>
<copy>
- <from>200</from>
+ <from>2</from>
<to>$operands.right</to>
</copy>
</assign>
<invoke partnerLink="olaGetPartnerLink"
portType="dummy:OlaElMundoPortType"
operation="minus" inputVariable="operands"
outputVariable="result"/>
- <!-- Compute r = r + 300 (= x + 200) -->
+ <!-- Compute r = r + 3 (= x + 2) -->
<assign>
<copy>
<from>$result.result</from>
<to>$operands.left</to>
</copy>
<copy>
- <from>300</from>
+ <from>3</from>
<to>$operands.right</to>
</copy>
</assign>
<invoke partnerLink="olaPostPartnerLink"
portType="dummy:OlaElMundoPortType"
operation="plus" inputVariable="operands"
outputVariable="result"/>
- <!-- Compute r = r - 400 (= x - 200) -->
+ <!-- Compute r = r - 4 (= x - 2) -->
<assign>
<copy>
<from>$result.result</from>
<to>$operands.left</to>
</copy>
<copy>
- <from>400</from>
+ <from>4</from>
<to>$operands.right</to>
</copy>
</assign>
<invoke partnerLink="olaPostPartnerLink"
portType="dummy:OlaElMundoPortType"
operation="minus" inputVariable="operands"
outputVariable="result"/>
- <!-- Compute r = r + 500 (= x + 300) -->
+
+
+ <!-- Compute r = r + 5 (= x + 3) -->
+ <assign>
+ <copy>
+ <from>$result.result</from>
+ <to>$operands.left</to>
+ </copy>
+ <copy>
+ <from>5</from>
+ <to>$operands.right</to>
+ </copy>
+ </assign>
+ <invoke partnerLink="olaDeletePartnerLink"
portType="dummy:OlaElMundoPortType"
+ operation="plus" inputVariable="operands"
outputVariable="result"/>
+
+ <!-- Compute r = r - 6 (= x - 3) -->
+ <assign>
+ <copy>
+ <from>$result.result</from>
+ <to>$operands.left</to>
+ </copy>
+ <copy>
+ <from>6</from>
+ <to>$operands.right</to>
+ </copy>
+ </assign>
+ <invoke partnerLink="olaDeletePartnerLink"
portType="dummy:OlaElMundoPortType"
+ operation="minus" inputVariable="operands"
outputVariable="result"/>
+
+
+
+ <!-- Compute r = r + 7 (= x + 4) -->
+ <assign>
+ <copy>
+ <from>$result.result</from>
+ <to>$operands.left</to>
+ </copy>
+ <copy>
+ <from>7</from>
+ <to>$operands.right</to>
+ </copy>
+ </assign>
+ <invoke partnerLink="olaPutPartnerLink"
portType="dummy:OlaElMundoPortType"
+ operation="plus" inputVariable="operands"
outputVariable="result"/>
+
+ <!-- Compute r = r - 9 (= x - 5) -->
+ <assign>
+ <copy>
+ <from>$result.result</from>
+ <to>$operands.left</to>
+ </copy>
+ <copy>
+ <from>9</from>
+ <to>$operands.right</to>
+ </copy>
+ </assign>
+ <invoke partnerLink="olaPutPartnerLink"
portType="dummy:OlaElMundoPortType"
+ operation="minus" inputVariable="operands"
outputVariable="result"/>
+
+
+ <!-- Compute r = r + 10 (= x + 5) -->
<assign>
<!-- First, build the proper element -->
<copy>
@@ -127,7 +192,7 @@
<literal>
<dummy:operandList>
<dummy:operand></dummy:operand>
- <dummy:operand>500</dummy:operand>
+ <dummy:operand>10</dummy:operand>
</dummy:operandList>
</literal>
</from>
Modified:
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/testRequest.soap
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/testRequest.soap?rev=653510&r1=653509&r2=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/testRequest.soap
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2-war/src/test/resources/TestHttpBinding/testRequest.soap
Mon May 5 08:47:57 2008
@@ -22,7 +22,7 @@
<!-- test soap message -->
<SOAP-ENV:Body>
<ns1:hello xmlns:ns1="http://ode/bpel/unit-test.wsdl">
- <TestPart xmlns="">10</TestPart>
+ <TestPart xmlns="">100</TestPart>
</ns1:hello>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Modified:
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java?rev=653510&r1=653509&r2=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
Mon May 5 08:47:57 2008
@@ -324,8 +324,10 @@
try {
if (WsdlUtils.useHTTPBinding(def, serviceName, portName)) {
+ if(__log.isDebugEnabled())__log.debug("Creating HTTP-bound
external service " + serviceName);
extService = new HttpExternalService(def, serviceName,
portName, _executorService, _scheduler, _server);
} else if (WsdlUtils.useSOAPBinding(def, serviceName, portName)) {
+ if(__log.isDebugEnabled())__log.debug("Creating SOAP-bound
external service " + serviceName);
extService = new SoapExternalService(def, serviceName,
portName, _executorService, _axisConfig, _scheduler, _server, pconf);
}
} catch (Exception ex) {
Modified:
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpBindingValidator.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpBindingValidator.java?rev=653510&r1=653509&r2=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpBindingValidator.java
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpBindingValidator.java
Mon May 5 08:47:57 2008
@@ -28,11 +28,11 @@
import javax.wsdl.BindingOutput;
import javax.wsdl.extensions.http.HTTPBinding;
import javax.wsdl.extensions.http.HTTPOperation;
-import java.util.Iterator;
import java.util.Map;
import java.util.Set;
-import java.util.regex.Matcher;
+import java.util.Iterator;
import java.util.regex.Pattern;
+import java.util.regex.Matcher;
/**
* @author <a href="mailto:[EMAIL PROTECTED]">Alexis Midon</a>
@@ -59,7 +59,10 @@
protected void validatePort() {
- if (!"get".equalsIgnoreCase(verb) && !"post".equalsIgnoreCase(verb)) {
+ if (!"GET".equalsIgnoreCase(verb)
+ && !"DELETE".equalsIgnoreCase(verb)
+ && !"PUT".equalsIgnoreCase(verb)
+ && !"POST".equalsIgnoreCase(verb)) {
throw new
IllegalArgumentException(httpMsgs.msgUnsupportedHttpMethod(binding, verb));
}
@@ -103,28 +106,31 @@
}
}
- // only GET can use urlreplacement
- if (!"get".equalsIgnoreCase(verb)) {
- if (WsdlUtils.useUrlReplacement(input)) {
- throw new
IllegalArgumentException(httpMsgs.msgUrlReplacementWithGetOnly(binding));
- }
+ if (WsdlUtils.useUrlReplacement(input)) {
+ validateUrlReplacement(bindingOperation);
}
// other specific validations
- if ("get".equalsIgnoreCase(verb)) {
- validateGet(bindingOperation);
+ if ("GET".equalsIgnoreCase(verb) || "DELETE".equalsIgnoreCase(verb)) {
+ validateGetOrDelete(bindingOperation);
}
}
- protected void validateGet(BindingOperation bindingOperation) {
- HTTPOperation httpOperation = (HTTPOperation)
WsdlUtils.getOperationExtension(bindingOperation);
+ protected void validateGetOrDelete(BindingOperation bindingOperation) {
BindingInput input = bindingOperation.getBindingInput();
- Map inputParts =
bindingOperation.getOperation().getInput().getMessage().getParts();
if (!WsdlUtils.useUrlEncoded(input) &&
!WsdlUtils.useUrlReplacement(input)) {
- throw new
IllegalArgumentException(httpMsgs.msgGetOnlySupportsUrlEncodedAndUrlreplacement(binding,
bindingOperation));
+ throw new
IllegalArgumentException(httpMsgs.msgOnlySupportsUrlEncodedAndUrlreplacement(binding,
bindingOperation));
}
+ // another test would be to check that all parts use a simple type
+ }
+
+ protected void validateUrlReplacement(BindingOperation bindingOperation) {
+ HTTPOperation httpOperation = (HTTPOperation)
WsdlUtils.getOperationExtension(bindingOperation);
+ BindingInput input = bindingOperation.getBindingInput();
+ Map inputParts =
bindingOperation.getOperation().getInput().getMessage().getParts();
+
// validate the url pattern
if (WsdlUtils.useUrlReplacement(input)) {
String locationUri = httpOperation.getLocationURI();
@@ -134,7 +140,7 @@
String name = (String) it.next();
Pattern p = Pattern.compile(".*(\\(" + name + "\\)).*");
Matcher m = p.matcher(locationUri);
- // might be perfectible
+ // is there a regex to do both validations in one?
if (!m.matches() || locationUri.split("(\\(" + name + "\\))",
-1).length != 2) {
throw new
IllegalArgumentException(httpMsgs.msgInvalidURIPattern(binding,
bindingOperation, locationUri));
}
Modified:
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpMethodBuilder.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpMethodBuilder.java?rev=653510&r1=653509&r2=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpMethodBuilder.java
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpMethodBuilder.java
Mon May 5 08:47:57 2008
@@ -25,6 +25,10 @@
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
+import org.apache.commons.httpclient.methods.DeleteMethod;
+import org.apache.commons.httpclient.methods.PutMethod;
+import org.apache.commons.httpclient.methods.ExpectContinueMethod;
+import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
@@ -102,38 +106,67 @@
return partValues;
}
- protected HttpMethod prepareHttpMethod(BindingOperation bindingOperation,
Map<String, Element> partValues, String rootUri) throws
UnsupportedEncodingException {
+ protected HttpMethod prepareHttpMethod(BindingOperation bindingOperation,
Map<String, Element> partValues, final String rootUri) throws
UnsupportedEncodingException {
if (log.isDebugEnabled()) log.debug("Preparing http request...");
- HttpMethod method;
+ // convenience variables...
BindingInput bindingInput = bindingOperation.getBindingInput();
HTTPOperation httpOperation = (HTTPOperation)
WsdlUtils.getOperationExtension(bindingOperation);
String contentType =
WsdlUtils.getMimeContentType(bindingInput.getExtensibilityElements());
boolean useUrlEncoded = WsdlUtils.useUrlEncoded(bindingInput) ||
PostMethod.FORM_URL_ENCODED_CONTENT_TYPE.equalsIgnoreCase(contentType);
boolean useUrlReplacement = WsdlUtils.useUrlReplacement(bindingInput);
+
+ final UrlReplacementTransformer replacementTransformer = new
UrlReplacementTransformer(partValues.keySet());
+ final URLEncodedTransformer encodedTransformer = new
URLEncodedTransformer();
+
+ // the http method to be built and returned
+ HttpMethod method = null;
+ // the 4 elements the http method may be made of
String relativeUri = httpOperation.getLocationURI();
- if ("get".equalsIgnoreCase(verb)) {
- String queryPath = null;
- if (useUrlReplacement) {
- // insert part values in the url
- UrlReplacementTransformer transformer = new
UrlReplacementTransformer(partValues.keySet());
- relativeUri = transformer.transform(relativeUri, partValues);
- } else if (useUrlEncoded) {
- // encode part values
- URLEncodedTransformer transformer = new
URLEncodedTransformer();
- queryPath = transformer.transform(partValues);
+ String queryPath = null;
+ RequestEntity requestEntity = null;
+ String encodedParams = null;
+
+
+ if (useUrlReplacement) {
+ // insert part values in the url
+ relativeUri = replacementTransformer.transform(relativeUri,
partValues);
+ } else if (useUrlEncoded) {
+ // encode part values
+ encodedParams = encodedTransformer.transform(partValues);
+ }
+
+ // http-client api is not really neat
+ // something similar to the following would save some if/else
manipulations.
+ // But we have to deal with it as-is.
+ //
+ // method = new Method(verb);
+ // method.setRequestEnity(..)
+ // etc...
+ if ("GET".equalsIgnoreCase(verb) || "DELETE".equalsIgnoreCase(verb)) {
+ if ("GET".equalsIgnoreCase(verb)) {
+ method = new GetMethod();
+ } else if ("DELETE".equalsIgnoreCase(verb)) {
+ method = new DeleteMethod();
+ }
+
+ if (useUrlEncoded) {
+ queryPath = encodedParams;
}
- String uri = rootUri + (relativeUri.startsWith("/") ? "" : "/") +
relativeUri;
- method = new GetMethod(uri);
- method.setQueryString(queryPath);
- // Let http-client manage the redirection for GET
+
+ // Let http-client manage the redirection
// see
org.apache.commons.httpclient.params.HttpClientParams.MAX_REDIRECTS
// default is 100
method.setFollowRedirects(true);
- } else if ("post".equalsIgnoreCase(verb)) {
- RequestEntity requestEntity;
+ } else if ("POST".equalsIgnoreCase(verb) ||
"PUT".equalsIgnoreCase(verb)) {
+
+ if ("POST".equalsIgnoreCase(verb)) {
+ method = new PostMethod();
+ } else if ("PUT".equalsIgnoreCase(verb)) {
+ method = new PutMethod();
+ }
+
+ // some body-building...
if (useUrlEncoded) {
- URLEncodedTransformer transformer = new
URLEncodedTransformer();
- String encodedParams = transformer.transform(partValues);
requestEntity = new StringRequestEntity(encodedParams,
PostMethod.FORM_URL_ENCODED_CONTENT_TYPE, "UTF-8");
} else if (contentType.endsWith(CONTENT_TYPE_TEXT_XML)) {
// assumption is made that there is a single part
@@ -141,7 +174,7 @@
Part part = (Part)
bindingOperation.getOperation().getInput().getMessage().getParts().values().iterator().next();
Element partValue = partValues.get(part.getName());
// if the part has an element name, we must take the first
element
- if(part.getElementName()!=null){
+ if (part.getElementName() != null) {
partValue = DOMUtils.getFirstChildElement(partValue);
}
String xmlString = DOMUtils.domToString(partValue);
@@ -150,14 +183,19 @@
// should not happen because of HttpBindingValidator, but
never say never
throw new IllegalArgumentException("Unsupported
content-type!");
}
- String uri = rootUri + (relativeUri.startsWith("/") ? "" : "/") +
relativeUri;
- PostMethod post = new PostMethod(uri);
- post.setRequestEntity(requestEntity);
- method = post;
+
+ // cast safely, PUT and POST are subclasses of
EntityEnclosingMethod
+ ((EntityEnclosingMethod) method).setRequestEntity(requestEntity);
+
} else {
// should not happen because of HttpBindingValidator, but never
say never
throw new IllegalArgumentException("Unsupported HTTP method: " +
verb);
}
+
+ // Settings common to all methods
+ String completeUri = rootUri + (rootUri.endsWith("/") ||
relativeUri.startsWith("/") ? "" : "/") + relativeUri;
+ method.setPath(completeUri); // assumes that the path is properly
encoded (URL safe).
+ method.setQueryString(queryPath);
return method;
}
}
Modified:
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/Messages.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/Messages.java?rev=653510&r1=653509&r2=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/Messages.java
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2/src/main/java/org/apache/ode/axis2/httpbinding/Messages.java
Mon May 5 08:47:57 2008
@@ -63,16 +63,12 @@
return format("Invalid content-type! binding:{0}, operation:{1}",
binding.getQName(), operation.getName());
}
- public String msgUrlReplacementWithGetOnly(Binding binding){
- return format("UrlReplacement may only be used with GET! binding:{0}",
binding.getQName());
- }
-
public String msgSimpleTypeExpected(String partName){
return format("Simple type expected for {0}", partName);
}
- public String msgGetOnlySupportsUrlEncodedAndUrlreplacement(Binding
binding, BindingOperation operation) {
- return format("Get only supports urlEncoded or urlReplacement!
binding:{0}, operation:{1}", binding.getQName(), operation.getName());
+ public String msgOnlySupportsUrlEncodedAndUrlreplacement(Binding binding,
BindingOperation operation) {
+ return format("Only supports urlEncoded or urlReplacement!
binding:{0}, operation:{1}", binding.getQName(), operation.getName());
}
}
Copied:
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingValidatorTest.java
(from r652724,
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/HttpBindingValidatorTest.java)
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingValidatorTest.java?p2=ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingValidatorTest.java&p1=ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/HttpBindingValidatorTest.java&r1=652724&r2=653510&rev=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/HttpBindingValidatorTest.java
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpBindingValidatorTest.java
Mon May 5 08:47:57 2008
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.ode.axis2;
+package org.apache.ode.axis2.httpbinding;
import junit.framework.TestCase;
Copied:
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/util/UrlReplacementTransformerTest.java
(from r652724,
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/UrlReplacementTransformerTest.java)
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/util/UrlReplacementTransformerTest.java?p2=ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/util/UrlReplacementTransformerTest.java&p1=ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/UrlReplacementTransformerTest.java&r1=652724&r2=653510&rev=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/UrlReplacementTransformerTest.java
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2/src/test/java/org/apache/ode/axis2/util/UrlReplacementTransformerTest.java
Mon May 5 08:47:57 2008
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.ode.axis2;
+package org.apache.ode.axis2.util;
import junit.framework.TestCase;
import org.apache.ode.axis2.util.UrlReplacementTransformer;
Modified:
ode/branches/APACHE_ODE_1.1/axis2/src/test/resources/http-binding-validator.wsdl
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.1/axis2/src/test/resources/http-binding-validator.wsdl?rev=653510&r1=653509&r2=653510&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.1/axis2/src/test/resources/http-binding-validator.wsdl
(original)
+++
ode/branches/APACHE_ODE_1.1/axis2/src/test/resources/http-binding-validator.wsdl
Mon May 5 08:47:57 2008
@@ -36,15 +36,48 @@
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
+ <!-- ###################################### -->
+ <!-- Supported HTTP Method tests-->
+ <!-- ###################################### -->
+ <wsdl:binding name="DummyServiceHttpBinding_get"
type="ns1:DummyServicePortType">
+ <wsdl:documentation>
+ shouldPass # GET should be supported
+ </wsdl:documentation>
+ <http:binding verb="GET"/>
+ <wsdl:operation name="hello">
+ <http:operation location="DummyService/hello"/>
+ <wsdl:input>
+ <http:urlEncoded/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="DummyServiceHttpBinding_post"
type="ns1:DummyServicePortType">
+ <wsdl:documentation>
+ shouldPass # POST should be supported
+ </wsdl:documentation>
+ <http:binding verb="POST"/>
+ <wsdl:operation name="hello">
+ <http:operation location="DummyService/hello"/>
+ <wsdl:input>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
<wsdl:binding name="DummyServiceHttpBinding_delete"
type="ns1:DummyServicePortType">
<wsdl:documentation>
- shouldFail # only GET and POST supported
+ shouldPass # DELETE should be supported
</wsdl:documentation>
<http:binding verb="DELETE"/>
<wsdl:operation name="hello">
<http:operation location="DummyService/hello"/>
<wsdl:input>
- <mime:content type="text/xml" part="hello"/>
+ <http:urlEncoded/>
</wsdl:input>
<wsdl:output>
<mime:content type="text/xml" part="hello"/>
@@ -53,7 +86,7 @@
</wsdl:binding>
<wsdl:binding name="DummyServiceHttpBinding_put"
type="ns1:DummyServicePortType">
<wsdl:documentation>
- shouldFail # only GET and POST supported
+ shouldPass # PUT should be supported
</wsdl:documentation>
<http:binding verb="PUT"/>
<wsdl:operation name="hello">
@@ -66,11 +99,11 @@
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:binding name="DummyServiceHttpBinding_post+text/xml"
type="ns1:DummyServicePortType">
+ <wsdl:binding name="DummyServiceHttpBinding_head"
type="ns1:DummyServicePortType">
<wsdl:documentation>
- shouldPass # POST+text/xml should be supported
+ shouldFail # only GET, DELETE, PUT, POST supported
</wsdl:documentation>
- <http:binding verb="POST"/>
+ <http:binding verb="HEAD"/>
<wsdl:operation name="hello">
<http:operation location="DummyService/hello"/>
<wsdl:input>
@@ -81,15 +114,81 @@
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:binding name="DummyServiceHttpBinding_post+urlReplacement"
type="ns1:DummyServicePortType">
+ <!-- ###################################### -->
+ <!-- PUT tests-->
+ <!-- ###################################### -->
+ <wsdl:binding name="DummyServiceHttpBinding_put+text/xml"
type="ns1:DummyServicePortType">
+ <wsdl:documentation>
+ shouldPass # PUT+text/xml should be supported
+ </wsdl:documentation>
+ <http:binding verb="PUT"/>
+ <wsdl:operation name="hello">
+ <http:operation location="DummyService/hello"/>
+ <wsdl:input>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="DummyServiceHttpBinding_put+urlEncoded"
type="ns1:DummyServicePortType">
+ <wsdl:documentation>
+ shouldPass # PUT should be able to use urlEncoded
+ </wsdl:documentation>
+ <http:binding verb="PUT"/>
+ <wsdl:operation name="hello">
+ <http:operation location="DummyService/hello"/>
+ <wsdl:input>
+ <http:urlEncoded/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="DummyServiceHttpBinding_put+form-urlencoded"
type="ns1:DummyServicePortType">
+ <wsdl:documentation>
+ shouldPass # application/x-www-form-urlencoded should be supported
for PUT
+ </wsdl:documentation>
+ <http:binding verb="PUT"/>
+ <wsdl:operation name="hello">
+ <http:operation location="DummyService/hello"/>
+ <wsdl:input>
+ <mime:content type="application/x-www-form-urlencoded"
part="hello"/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="DummyServiceHttpBinding_put+whatever-content-type"
type="ns1:DummyServicePortType">
+ <wsdl:documentation>
+ shouldFail # Only application/x-www-form-urlencoded and text/xml
should be supported
+ </wsdl:documentation>
+ <http:binding verb="PUT"/>
+ <wsdl:operation name="hello">
+ <http:operation location="DummyService/hello"/>
+ <wsdl:input>
+ <mime:content type="whatever-content-type" part="hello"/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <!-- ###################################### -->
+ <!-- POST tests-->
+ <!-- ###################################### -->
+ <wsdl:binding name="DummyServiceHttpBinding_post+text/xml"
type="ns1:DummyServicePortType">
<wsdl:documentation>
- shouldFail # POST cannot use urlReplacement
+ shouldPass # POST+text/xml should be supported
</wsdl:documentation>
<http:binding verb="POST"/>
<wsdl:operation name="hello">
- <http:operation location="DummyService/hello/(part1)"/>
+ <http:operation location="DummyService/hello"/>
<wsdl:input>
- <http:urlReplacement/>
+ <mime:content type="text/xml" part="hello"/>
</wsdl:input>
<wsdl:output>
<mime:content type="text/xml" part="hello"/>
@@ -141,6 +240,9 @@
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
+ <!-- ###################################### -->
+ <!-- GET tests-->
+ <!-- ###################################### -->
<wsdl:binding name="DummyServiceHttpBinding_get+whatever-content-type"
type="ns1:DummyServicePortType">
<wsdl:documentation>
shouldFail # GET only supports urlReplacement and urlEncoded
@@ -171,6 +273,73 @@
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
+ <!-- ###################################### -->
+ <!-- DELETE tests-->
+ <!-- ###################################### -->
+ <wsdl:binding name="DummyServiceHttpBinding_delete+whatever-content-type"
type="ns1:DummyServicePortType">
+ <wsdl:documentation>
+ shouldFail # DELETE only supports urlReplacement and urlEncoded
+ </wsdl:documentation>
+ <http:binding verb="DELETE"/>
+ <wsdl:operation name="hello">
+ <http:operation location="DummyService/hello"/>
+ <wsdl:input>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="DummyServiceHttpBinding_delete+urlEncoded"
type="ns1:DummyServicePortType">
+ <wsdl:documentation>
+ shouldPass # DELETE should support urlEncoded
+ </wsdl:documentation>
+ <http:binding verb="DELETE"/>
+ <wsdl:operation name="hello">
+ <http:operation location="DummyService/hello"/>
+ <wsdl:input>
+ <http:urlEncoded/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+
+ <!-- ###################################### -->
+ <!-- urlReplacement tests-->
+ <!-- ###################################### -->
+ <wsdl:binding name="DummyServiceHttpBinding_post+urlReplacement"
type="ns1:DummyServicePortType">
+ <wsdl:documentation>
+ shouldPass # POST can use urlReplacement
+ </wsdl:documentation>
+ <http:binding verb="POST"/>
+ <wsdl:operation name="hello">
+ <http:operation location="DummyService/hello/(TestPart)"/>
+ <wsdl:input>
+ <http:urlReplacement/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="DummyServiceHttpBinding_put+urlReplacement"
type="ns1:DummyServicePortType">
+ <wsdl:documentation>
+ shouldPass # PUT can use urlReplacement
+ </wsdl:documentation>
+ <http:binding verb="PUT"/>
+ <wsdl:operation name="hello">
+ <http:operation location="DummyService/hello/(TestPart)"/>
+ <wsdl:input>
+ <http:urlReplacement/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
<wsdl:binding name="DummyServiceHttpBinding_get+urlReplacement"
type="ns1:DummyServicePortType">
<wsdl:documentation>
shouldPass # GET should support urlReplacement
@@ -186,9 +355,24 @@
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
+ <wsdl:binding name="DummyServiceHttpBinding_delete+urlReplacement"
type="ns1:DummyServicePortType">
+ <wsdl:documentation>
+ shouldPass # DELETE should support urlReplacement
+ </wsdl:documentation>
+ <http:binding verb="DELETE"/>
+ <wsdl:operation name="hello">
+ <http:operation location="DummyService/hello/(TestPart)"/>
+ <wsdl:input>
+ <http:urlReplacement/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="hello"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
<wsdl:binding
name="DummyServiceHttpBinding_get+urlReplacement+missing_part"
type="ns1:DummyServicePortType">
<wsdl:documentation>
- shouldFail # When urlReplacement used, all message parts must be
in the url pattern
+ shouldFail # When urlReplacement used, all message parts must be
in the url pattern
</wsdl:documentation>
<http:binding verb="GET"/>
<wsdl:operation name="hello">
@@ -217,4 +401,4 @@
</wsdl:operation>
</wsdl:binding>
<!-- no <service> tags needed -->
-</wsdl:definitions>
\ No newline at end of file
+</wsdl:definitions>