(CalculatorImpl.class));
+ this.registerRequestHandler(wsHandler, this.webServiceRequestHandlerKey());
+
+ }
+}
diff --git a/Examples/ErJaxWS/WebService_Imported/Sources/your/app/DirectAction.java b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/DirectAction.java
new file mode 100644
index 00000000000..19adaf30160
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/DirectAction.java
@@ -0,0 +1,29 @@
+package your.app;
+
+import com.webobjects.appserver.WOActionResults;
+import com.webobjects.appserver.WOApplication;
+import com.webobjects.appserver.WORequest;
+
+import er.extensions.appserver.ERXDirectAction;
+
+import your.app.components.Main;
+
+public class DirectAction extends ERXDirectAction {
+ public DirectAction(WORequest request) {
+ super(request);
+ }
+
+ @Override
+ public WOActionResults defaultAction() {
+ return pageWithName(Main.class.getName());
+ }
+
+ public Application application() {
+ return (Application)WOApplication.application();
+ }
+
+ @Override
+ public Session session() {
+ return (Session)super.session();
+ }
+}
diff --git a/Examples/ErJaxWS/WebService_Imported/Sources/your/app/Session.java b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/Session.java
new file mode 100644
index 00000000000..ffd4bb6f202
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/Session.java
@@ -0,0 +1,16 @@
+package your.app;
+
+import er.extensions.appserver.ERXSession;
+
+public class Session extends ERXSession {
+ private static final long serialVersionUID = 1L;
+
+ public Session() {
+ }
+
+ @Override
+ public Application application() {
+ return (Application)super.application();
+ }
+
+}
diff --git a/Examples/ErJaxWS/WebService_Imported/Sources/your/app/components/BaseComponent.java b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/components/BaseComponent.java
new file mode 100644
index 00000000000..eccd845afd6
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/components/BaseComponent.java
@@ -0,0 +1,24 @@
+package your.app.components;
+
+import com.webobjects.appserver.WOContext;
+
+import er.extensions.components.ERXComponent;
+import your.app.Application;
+import your.app.Session;
+
+@SuppressWarnings("serial")
+public class BaseComponent extends ERXComponent {
+ public BaseComponent(WOContext context) {
+ super(context);
+ }
+
+ @Override
+ public Application application() {
+ return (Application)super.application();
+ }
+
+ @Override
+ public Session session() {
+ return (Session)super.session();
+ }
+}
diff --git a/Examples/ErJaxWS/WebService_Imported/Sources/your/app/components/Main.java b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/components/Main.java
new file mode 100644
index 00000000000..ed0bbc67b29
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/components/Main.java
@@ -0,0 +1,10 @@
+package your.app.components;
+
+import com.webobjects.appserver.WOContext;
+
+@SuppressWarnings("serial")
+public class Main extends BaseComponent {
+ public Main(WOContext context) {
+ super(context);
+ }
+}
diff --git a/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/Add.java b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/Add.java
new file mode 100644
index 00000000000..ad0306a40ca
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/Add.java
@@ -0,0 +1,71 @@
+
+package your.app.ws;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * Java class for add complex type.
+ *
+ *
The following schema fragment specifies the expected content contained within this class.
+ *
+ *
+ * <complexType name="add">
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <sequence>
+ * <element name="arg0" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ * <element name="arg1" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ * </sequence>
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ *
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "add", propOrder = {
+ "arg0",
+ "arg1"
+})
+public class Add {
+
+ protected int arg0;
+ protected int arg1;
+
+ /**
+ * Gets the value of the arg0 property.
+ *
+ */
+ public int getArg0() {
+ return arg0;
+ }
+
+ /**
+ * Sets the value of the arg0 property.
+ *
+ */
+ public void setArg0(int value) {
+ this.arg0 = value;
+ }
+
+ /**
+ * Gets the value of the arg1 property.
+ *
+ */
+ public int getArg1() {
+ return arg1;
+ }
+
+ /**
+ * Sets the value of the arg1 property.
+ *
+ */
+ public void setArg1(int value) {
+ this.arg1 = value;
+ }
+
+}
diff --git a/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/AddResponse.java b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/AddResponse.java
new file mode 100644
index 00000000000..1a8a0893a05
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/AddResponse.java
@@ -0,0 +1,54 @@
+
+package your.app.ws;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * Java class for addResponse complex type.
+ *
+ *
The following schema fragment specifies the expected content contained within this class.
+ *
+ *
+ * <complexType name="addResponse">
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <sequence>
+ * <element name="return" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ * </sequence>
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ *
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "addResponse", propOrder = {
+ "_return"
+})
+public class AddResponse {
+
+ @XmlElement(name = "return")
+ protected int _return;
+
+ /**
+ * Gets the value of the return property.
+ *
+ */
+ public int getReturn() {
+ return _return;
+ }
+
+ /**
+ * Sets the value of the return property.
+ *
+ */
+ public void setReturn(int value) {
+ this._return = value;
+ }
+
+}
diff --git a/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/Calculator.java b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/Calculator.java
new file mode 100644
index 00000000000..75f9ef65ecb
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/Calculator.java
@@ -0,0 +1,43 @@
+
+package your.app.ws;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.ResponseWrapper;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.2.4-b01
+ * Generated source version: 2.2
+ *
+ */
+@WebService(name = "Calculator", targetNamespace = "http://ws.app.your/")
+@XmlSeeAlso({
+ ObjectFactory.class
+})
+public interface Calculator {
+
+
+ /**
+ *
+ * @param arg1
+ * @param arg0
+ * @return
+ * returns int
+ */
+ @WebMethod
+ @WebResult(targetNamespace = "")
+ @RequestWrapper(localName = "add", targetNamespace = "http://ws.app.your/", className = "your.app.ws.Add")
+ @ResponseWrapper(localName = "addResponse", targetNamespace = "http://ws.app.your/", className = "your.app.ws.AddResponse")
+ public int add(
+ @WebParam(name = "arg0", targetNamespace = "")
+ int arg0,
+ @WebParam(name = "arg1", targetNamespace = "")
+ int arg1);
+
+}
diff --git a/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/CalculatorService.java b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/CalculatorService.java
new file mode 100644
index 00000000000..655e9b8efc1
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/CalculatorService.java
@@ -0,0 +1,94 @@
+
+package your.app.ws;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebEndpoint;
+import javax.xml.ws.WebServiceClient;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.WebServiceFeature;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.2.4-b01
+ * Generated source version: 2.2
+ *
+ */
+@WebServiceClient(name = "CalculatorService", targetNamespace = "http://ws.app.your/", wsdlLocation = "http://localhost:3333/cgi-bin/WebObjects/WebService1.woa/ws/Calculator?wsdl")
+public class CalculatorService
+ extends Service
+{
+
+ private final static URL CALCULATORSERVICE_WSDL_LOCATION;
+ private final static WebServiceException CALCULATORSERVICE_EXCEPTION;
+ private final static QName CALCULATORSERVICE_QNAME = new QName("http://ws.app.your/", "CalculatorService");
+
+ static {
+ URL url = null;
+ WebServiceException e = null;
+ try {
+ url = new URL("http://localhost:3333/cgi-bin/WebObjects/WebService1.woa/ws/Calculator?wsdl");
+ } catch (MalformedURLException ex) {
+ e = new WebServiceException(ex);
+ }
+ CALCULATORSERVICE_WSDL_LOCATION = url;
+ CALCULATORSERVICE_EXCEPTION = e;
+ }
+
+ public CalculatorService() {
+ super(__getWsdlLocation(), CALCULATORSERVICE_QNAME);
+ }
+
+ public CalculatorService(WebServiceFeature... features) {
+ super(__getWsdlLocation(), CALCULATORSERVICE_QNAME, features);
+ }
+
+ public CalculatorService(URL wsdlLocation) {
+ super(wsdlLocation, CALCULATORSERVICE_QNAME);
+ }
+
+ public CalculatorService(URL wsdlLocation, WebServiceFeature... features) {
+ super(wsdlLocation, CALCULATORSERVICE_QNAME, features);
+ }
+
+ public CalculatorService(URL wsdlLocation, QName serviceName) {
+ super(wsdlLocation, serviceName);
+ }
+
+ public CalculatorService(URL wsdlLocation, QName serviceName, WebServiceFeature... features) {
+ super(wsdlLocation, serviceName, features);
+ }
+
+ /**
+ *
+ * @return
+ * returns Calculator
+ */
+ @WebEndpoint(name = "CalculatorPort")
+ public Calculator getCalculatorPort() {
+ return super.getPort(new QName("http://ws.app.your/", "CalculatorPort"), Calculator.class);
+ }
+
+ /**
+ *
+ * @param features
+ * A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the features
parameter will have their default values.
+ * @return
+ * returns Calculator
+ */
+ @WebEndpoint(name = "CalculatorPort")
+ public Calculator getCalculatorPort(WebServiceFeature... features) {
+ return super.getPort(new QName("http://ws.app.your/", "CalculatorPort"), Calculator.class, features);
+ }
+
+ private static URL __getWsdlLocation() {
+ if (CALCULATORSERVICE_EXCEPTION!= null) {
+ throw CALCULATORSERVICE_EXCEPTION;
+ }
+ return CALCULATORSERVICE_WSDL_LOCATION;
+ }
+
+}
diff --git a/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/ObjectFactory.java b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/ObjectFactory.java
new file mode 100644
index 00000000000..c65262d313f
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/ObjectFactory.java
@@ -0,0 +1,71 @@
+
+package your.app.ws;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.namespace.QName;
+
+
+/**
+ * This object contains factory methods for each
+ * Java content interface and Java element interface
+ * generated in the your.app.ws package.
+ * An ObjectFactory allows you to programatically
+ * construct new instances of the Java representation
+ * for XML content. The Java representation of XML
+ * content can consist of schema derived interfaces
+ * and classes representing the binding of schema
+ * type definitions, element declarations and model
+ * groups. Factory methods for each of these are
+ * provided in this class.
+ *
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+ private final static QName _AddResponse_QNAME = new QName("http://ws.app.your/", "addResponse");
+ private final static QName _Add_QNAME = new QName("http://ws.app.your/", "add");
+
+ /**
+ * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: your.app.ws
+ *
+ */
+ public ObjectFactory() {
+ }
+
+ /**
+ * Create an instance of {@link AddResponse }
+ *
+ */
+ public AddResponse createAddResponse() {
+ return new AddResponse();
+ }
+
+ /**
+ * Create an instance of {@link Add }
+ *
+ */
+ public Add createAdd() {
+ return new Add();
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link AddResponse }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "http://ws.app.your/", name = "addResponse")
+ public JAXBElement createAddResponse(AddResponse value) {
+ return new JAXBElement(_AddResponse_QNAME, AddResponse.class, null, value);
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link Add }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "http://ws.app.your/", name = "add")
+ public JAXBElement createAdd(Add value) {
+ return new JAXBElement(_Add_QNAME, Add.class, null, value);
+ }
+
+}
diff --git a/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/impl/CalculatorImpl.java b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/impl/CalculatorImpl.java
new file mode 100644
index 00000000000..cbaf546a7cc
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/impl/CalculatorImpl.java
@@ -0,0 +1,17 @@
+package your.app.ws.impl;
+
+import javax.jws.WebService;
+
+import your.app.ws.Calculator;
+
+@WebService (endpointInterface = "your.app.ws.Calculator",
+ targetNamespace = "http://ws.app.your/")
+
+public class CalculatorImpl implements Calculator {
+
+ @Override
+ public int add(int arg0, int arg1) {
+ return arg0 + arg1;
+ }
+
+}
diff --git a/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/package-info.java b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/package-info.java
new file mode 100644
index 00000000000..76557317c8f
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/Sources/your/app/ws/package-info.java
@@ -0,0 +1,2 @@
+@javax.xml.bind.annotation.XmlSchema(namespace = "http://ws.app.your/")
+package your.app.ws;
diff --git a/Examples/ErJaxWS/WebService_Imported/build.properties b/Examples/ErJaxWS/WebService_Imported/build.properties
new file mode 100644
index 00000000000..01bfacc7fc0
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/build.properties
@@ -0,0 +1,13 @@
+classes.dir=bin
+project.name=WebService_Imported
+project.name.lowercase=webservice_imported
+project.type=application
+principalClass=your.app.Application
+customInfoPListContent=
+embed.Local=true
+embed.System=true
+webXML=false
+webXML_CustomContent=
+component.wellFormedTemplateRequired=false
+component.inlineBindingPrefix=$
+component.inlineBindingSuffix=
\ No newline at end of file
diff --git a/Examples/ErJaxWS/WebService_Imported/build.xml b/Examples/ErJaxWS/WebService_Imported/build.xml
new file mode 100644
index 00000000000..c31ce574d25
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/build.xml
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Examples/ErJaxWS/WebService_Imported/woproject/classes.exclude.patternset b/Examples/ErJaxWS/WebService_Imported/woproject/classes.exclude.patternset
new file mode 100644
index 00000000000..56fb545fa67
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/woproject/classes.exclude.patternset
@@ -0,0 +1 @@
+build.properties
diff --git a/Examples/ErJaxWS/WebService_Imported/woproject/classes.include.patternset b/Examples/ErJaxWS/WebService_Imported/woproject/classes.include.patternset
new file mode 100644
index 00000000000..3179091db39
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/woproject/classes.include.patternset
@@ -0,0 +1,2 @@
+**/*.class
+*.properties
diff --git a/Examples/ErJaxWS/WebService_Imported/woproject/resources.exclude.patternset b/Examples/ErJaxWS/WebService_Imported/woproject/resources.exclude.patternset
new file mode 100644
index 00000000000..905050dfb73
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/woproject/resources.exclude.patternset
@@ -0,0 +1,3 @@
+**/*.eomodeld~/
+**/*.woa/**
+**/*.framework/**
diff --git a/Examples/ErJaxWS/WebService_Imported/woproject/resources.include.patternset b/Examples/ErJaxWS/WebService_Imported/woproject/resources.include.patternset
new file mode 100644
index 00000000000..611978755e2
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/woproject/resources.include.patternset
@@ -0,0 +1,3 @@
+Components/**/*.wo/**/*
+Components/**/*.api
+Resources/**/*
\ No newline at end of file
diff --git a/Examples/ErJaxWS/WebService_Imported/woproject/wsresources.exclude.patternset b/Examples/ErJaxWS/WebService_Imported/woproject/wsresources.exclude.patternset
new file mode 100644
index 00000000000..9435a512320
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/woproject/wsresources.exclude.patternset
@@ -0,0 +1,3 @@
+**/*.woa/**
+**/*.framework/**
+**/*.eomodeld~/**
diff --git a/Examples/ErJaxWS/WebService_Imported/woproject/wsresources.include.patternset b/Examples/ErJaxWS/WebService_Imported/woproject/wsresources.include.patternset
new file mode 100644
index 00000000000..234cdc88bb7
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Imported/woproject/wsresources.include.patternset
@@ -0,0 +1 @@
+WebServerResources/**/*
diff --git a/Examples/ErJaxWS/WebService_Stateful/.classpath b/Examples/ErJaxWS/WebService_Stateful/.classpath
new file mode 100644
index 00000000000..47ad26fc0a7
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/.classpath
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Examples/ErJaxWS/WebService_Stateful/.gitignore b/Examples/ErJaxWS/WebService_Stateful/.gitignore
new file mode 100644
index 00000000000..fcc7e7a559b
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/.gitignore
@@ -0,0 +1,6 @@
+target
+bin
+build
+*.xcodeproj
+*.pbxproj
+ant.*
\ No newline at end of file
diff --git a/Examples/ErJaxWS/WebService_Stateful/.project b/Examples/ErJaxWS/WebService_Stateful/.project
new file mode 100644
index 00000000000..a6f407296ca
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/.project
@@ -0,0 +1,23 @@
+
+
+ WebService_Stateful
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.objectstyle.wolips.incrementalbuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.objectstyle.wolips.incrementalapplicationnature
+
+
diff --git a/Examples/ErJaxWS/WebService_Stateful/.settings/org.eclipse.core.resources.prefs b/Examples/ErJaxWS/WebService_Stateful/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000000..c294b90fcbe
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/Components=UTF-8
diff --git a/Examples/ErJaxWS/WebService_Stateful/Components/Main.api b/Examples/ErJaxWS/WebService_Stateful/Components/Main.api
new file mode 100644
index 00000000000..12535ad8d04
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/Components/Main.api
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/Examples/ErJaxWS/WebService_Stateful/Components/Main.wo/Main.html b/Examples/ErJaxWS/WebService_Stateful/Components/Main.wo/Main.html
new file mode 100644
index 00000000000..c83b82eb634
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/Components/Main.wo/Main.html
@@ -0,0 +1,13 @@
+
+
+
+ Untitled
+
+
+Stateful WebService
+
+Ask server
+
+Server says:
+
+
diff --git a/Examples/ErJaxWS/WebService_Stateful/Components/Main.wo/Main.wod b/Examples/ErJaxWS/WebService_Stateful/Components/Main.wo/Main.wod
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/Examples/ErJaxWS/WebService_Stateful/Components/Main.wo/Main.woo b/Examples/ErJaxWS/WebService_Stateful/Components/Main.wo/Main.woo
new file mode 100644
index 00000000000..1f6e847c167
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/Components/Main.wo/Main.woo
@@ -0,0 +1,4 @@
+{
+ "WebObjects Release" = "WebObjects 5.0";
+ encoding = "UTF-8";
+}
\ No newline at end of file
diff --git a/Examples/ErJaxWS/WebService_Stateful/Libraries/testservice.jar b/Examples/ErJaxWS/WebService_Stateful/Libraries/testservice.jar
new file mode 100644
index 00000000000..28b7b07534a
Binary files /dev/null and b/Examples/ErJaxWS/WebService_Stateful/Libraries/testservice.jar differ
diff --git a/Examples/ErJaxWS/WebService_Stateful/Resources/Properties b/Examples/ErJaxWS/WebService_Stateful/Resources/Properties
new file mode 100644
index 00000000000..7fac8817a35
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/Resources/Properties
@@ -0,0 +1,68 @@
+# OGNL
+ognl.helperFunctions=true
+ognl.inlineBindings=true
+
+# Misc
+er.extensions.stackTrace.cleanup=true
+
+# EOF
+er.extensions.ERXEC.safeLocking=true
+er.extensions.ERXEC.useSharedEditingContext=false
+er.extensions.ERXEnterpriseObject.applyRestrictingQualifierOnInsert=true
+er.extensions.ERXEnterpriseObject.updateInverseRelationships=true
+#dbConnectURLGLOBAL=
+#dbConnectUserGLOBAL=
+#dbConnectPasswordGLOBAL=
+
+# Migrations
+#er.migration.migrateAtStartup=true
+#er.migration.createTablesIfNecessary=true
+#er.migration.modelNames=YourModel
+
+# Misc Components
+#er.extensions.ERXWOForm.multipleSubmitDefault=true
+#er.extensions.ERXWORepetition.checkHashCodes=true
+#er.extensions.ERXWORepetition.raiseOnUnmatchedObject=true
+#er.extensions.ERXWORepetition.eoSupport=true
+#er.component.clickToOpen=true
+#wolips.password=wo
+
+# ERJavaMail
+er.javamail.centralize=true
+er.javamail.adminEmail=admin@yourhost.com
+er.javamail.debugEnabled=false
+er.javamail.smtpHost=your.smtpserver.com
+er.javamail.smtpAuth=false
+er.javamail.smtpUser=
+er.javamail.smtpPassword=
+
+# Log4j Configuration
+log4j.loggerFactory=er.extensions.logging.ERXLogger$Factory
+log4j.rootCategory=INFO,A1
+log4j.appender.A1=er.extensions.logging.ERXConsoleAppender
+log4j.appender.A1.layout=er.extensions.logging.ERXPatternLayout
+log4j.appender.A1.layout.ConversionPattern=%d{MMM dd HH:mm:ss} %$[%#] %-5p %c %x - %m%n
+
+# Log4j Categories
+# Here are a few log4j sub-categories that are interesting.
+# Don't forget that in developement mode this file will get reloaded
+# everytime it changes, so if you say want to turn adaptor debugging
+# on in the middle of the app simply set the below category to debug.
+# Very handy.
+# Base Category
+log4j.logger.er=INFO
+
+# ERExtensions
+# Transaction - Switching this to debug will start the sql ouputting.
+log4j.logger.er.transaction.adaptor.EOAdaptorDebugEnabled=DEBUG
+
+# Fixes - Turning this on will show all the models that are loaded
+log4j.logger.er.extensions.fixes.ERSharedEOLoader=INFO
+
+er.extensions.ERXNSLogLog4jBridge=INFO
+#log4j.logger.er.eo.ERXGenericRecord=DEBUG
+#log4j.logger.er.validation.ERXEntityClassDescription=DEBUG
+#log4j.logger.er.default.ERXEntityClassDescription=DEBUG
+log4j.logger.er.extensions.ERXDatabaseContextDelegate=WARN
+log4j.logger.er.extensions.ERXConfigurationManager=INFO
+#log4j.logger.er.extensions.ERXApplication.RequestHandling=DEBUG
diff --git a/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/Application.java b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/Application.java
new file mode 100644
index 00000000000..b9d66a52a4e
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/Application.java
@@ -0,0 +1,22 @@
+package your.app;
+
+import your.app.ws.StatefulActionImpl;
+import er.extensions.appserver.ERXApplication;
+import er.extensions.appserver.ws.ERJaxWebService;
+import er.extensions.appserver.ws.ERJaxWebServiceRequestHandler;
+
+public class Application extends ERXApplication {
+ public static void main(String[] argv) {
+ ERXApplication.main(argv, Application.class);
+ }
+
+ public Application() {
+ ERXApplication.log.info("Welcome to " + name() + " !");
+ /* ** put your initialization code in here ** */
+ setAllowsConcurrentRequestHandling(true);
+
+ ERJaxWebServiceRequestHandler wsHandler = new ERJaxWebServiceRequestHandler();
+ wsHandler.registerWebService("StatefulAction", new ERJaxWebService(StatefulActionImpl.class));
+ this.registerRequestHandler(wsHandler, this.webServiceRequestHandlerKey());
+ }
+}
diff --git a/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/DirectAction.java b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/DirectAction.java
new file mode 100644
index 00000000000..19adaf30160
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/DirectAction.java
@@ -0,0 +1,29 @@
+package your.app;
+
+import com.webobjects.appserver.WOActionResults;
+import com.webobjects.appserver.WOApplication;
+import com.webobjects.appserver.WORequest;
+
+import er.extensions.appserver.ERXDirectAction;
+
+import your.app.components.Main;
+
+public class DirectAction extends ERXDirectAction {
+ public DirectAction(WORequest request) {
+ super(request);
+ }
+
+ @Override
+ public WOActionResults defaultAction() {
+ return pageWithName(Main.class.getName());
+ }
+
+ public Application application() {
+ return (Application)WOApplication.application();
+ }
+
+ @Override
+ public Session session() {
+ return (Session)super.session();
+ }
+}
diff --git a/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/Session.java b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/Session.java
new file mode 100644
index 00000000000..e93a2471217
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/Session.java
@@ -0,0 +1,19 @@
+package your.app;
+
+
+import er.extensions.appserver.ERXSession;
+
+public class Session extends ERXSession {
+ private static final long serialVersionUID = 1L;
+
+ public Session() {
+ }
+
+ @Override
+ public Application application() {
+ return (Application)super.application();
+ }
+
+
+ public boolean authenticated = false;
+}
diff --git a/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/components/BaseComponent.java b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/components/BaseComponent.java
new file mode 100644
index 00000000000..eccd845afd6
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/components/BaseComponent.java
@@ -0,0 +1,24 @@
+package your.app.components;
+
+import com.webobjects.appserver.WOContext;
+
+import er.extensions.components.ERXComponent;
+import your.app.Application;
+import your.app.Session;
+
+@SuppressWarnings("serial")
+public class BaseComponent extends ERXComponent {
+ public BaseComponent(WOContext context) {
+ super(context);
+ }
+
+ @Override
+ public Application application() {
+ return (Application)super.application();
+ }
+
+ @Override
+ public Session session() {
+ return (Session)super.session();
+ }
+}
diff --git a/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/components/Main.java b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/components/Main.java
new file mode 100644
index 00000000000..bb3b0007a5d
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/components/Main.java
@@ -0,0 +1,37 @@
+package your.app.components;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.xml.ws.BindingProvider;
+
+import your.app.ws.StatefulAction;
+import your.app.ws.StatefulActionException;
+import your.app.ws.StatefulActionImplService;
+
+import com.webobjects.appserver.WOActionResults;
+import com.webobjects.appserver.WOContext;
+
+@SuppressWarnings("serial")
+public class Main extends BaseComponent {
+ public Main(WOContext context) {
+ super(context);
+ }
+
+ public WOActionResults doit() throws MalformedURLException, StatefulActionException {
+ URL url = new URL("http://127.0.0.1:3335/cgi-bin/WebObjects/WebService_Stateful.woa/ws/StatefulAction?wsdl");
+
+ StatefulActionImplService service = new StatefulActionImplService(url);
+
+ StatefulAction sAction = service.getPort(StatefulAction.class);
+
+ ((BindingProvider) sAction).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
+
+ sAction.authenticate("name", "password");
+ serverOutput = sAction.testAction("test");
+
+ return null;
+ }
+
+ public String serverOutput = null;
+}
diff --git a/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/ws/StatefulActionImpl.java b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/ws/StatefulActionImpl.java
new file mode 100644
index 00000000000..1def626b04f
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/Sources/your/app/ws/StatefulActionImpl.java
@@ -0,0 +1,54 @@
+package your.app.ws;
+
+import javax.annotation.Resource;
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
+
+import your.app.Session;
+import er.extensions.appserver.ERXWOContext;
+import er.extensions.appserver.ws.ERWSWOHTTPConnection;
+
+@WebService (
+ endpointInterface = "your.app.ws.StatefulAction")
+
+public class StatefulActionImpl implements StatefulAction
+{
+ @Resource
+ private WebServiceContext wsContext;
+
+ @Override
+ @WebMethod
+ public void authenticate(String login, String password)
+ throws StatefulActionException {
+
+ if(login.length() == 0 || password.length() == 0)
+ {
+ StatefulActionFaultInfo statefulActionFaultInfo = new StatefulActionFaultInfo();
+ statefulActionFaultInfo.setMessage("INVALID_LOGIN");
+ throw new StatefulActionException("INVALID_LOGIN", statefulActionFaultInfo);
+ };
+
+ MessageContext mc = wsContext.getMessageContext();
+ ERXWOContext context = (ERXWOContext) mc.get(ERWSWOHTTPConnection.ERJAXWS_ERXWOCONTEXT);
+
+ ((Session)context.session()).authenticated = true;
+ }
+
+ @Override
+ @WebMethod
+ public String testAction(String name) throws StatefulActionException {
+ MessageContext mc = wsContext.getMessageContext();
+ ERXWOContext context = (ERXWOContext) mc.get(ERWSWOHTTPConnection.ERJAXWS_ERXWOCONTEXT);
+
+ if(!((Session)context.session()).authenticated)
+ {
+ StatefulActionFaultInfo statefulActionFaultInfo = new StatefulActionFaultInfo();
+ statefulActionFaultInfo.setMessage("NOT_AUTHENTICATED");
+ throw new StatefulActionException("NOT_AUTHENTICATED", statefulActionFaultInfo);
+ }
+
+ return "Hello " + name;
+ }
+}
diff --git a/Examples/ErJaxWS/WebService_Stateful/build.properties b/Examples/ErJaxWS/WebService_Stateful/build.properties
new file mode 100644
index 00000000000..82cdd35e1e4
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/build.properties
@@ -0,0 +1,13 @@
+classes.dir=bin
+project.name=WebService_Stateful
+project.name.lowercase=webservice_stateful
+project.type=application
+principalClass=your.app.Application
+customInfoPListContent=
+embed.Local=true
+embed.System=true
+webXML=false
+webXML_CustomContent=
+component.wellFormedTemplateRequired=false
+component.inlineBindingPrefix=$
+component.inlineBindingSuffix=
\ No newline at end of file
diff --git a/Examples/ErJaxWS/WebService_Stateful/build.xml b/Examples/ErJaxWS/WebService_Stateful/build.xml
new file mode 100644
index 00000000000..f23b9a1e081
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/build.xml
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Examples/ErJaxWS/WebService_Stateful/woproject/classes.exclude.patternset b/Examples/ErJaxWS/WebService_Stateful/woproject/classes.exclude.patternset
new file mode 100644
index 00000000000..56fb545fa67
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/woproject/classes.exclude.patternset
@@ -0,0 +1 @@
+build.properties
diff --git a/Examples/ErJaxWS/WebService_Stateful/woproject/classes.include.patternset b/Examples/ErJaxWS/WebService_Stateful/woproject/classes.include.patternset
new file mode 100644
index 00000000000..3179091db39
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/woproject/classes.include.patternset
@@ -0,0 +1,2 @@
+**/*.class
+*.properties
diff --git a/Examples/ErJaxWS/WebService_Stateful/woproject/resources.exclude.patternset b/Examples/ErJaxWS/WebService_Stateful/woproject/resources.exclude.patternset
new file mode 100644
index 00000000000..905050dfb73
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/woproject/resources.exclude.patternset
@@ -0,0 +1,3 @@
+**/*.eomodeld~/
+**/*.woa/**
+**/*.framework/**
diff --git a/Examples/ErJaxWS/WebService_Stateful/woproject/resources.include.patternset b/Examples/ErJaxWS/WebService_Stateful/woproject/resources.include.patternset
new file mode 100644
index 00000000000..611978755e2
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/woproject/resources.include.patternset
@@ -0,0 +1,3 @@
+Components/**/*.wo/**/*
+Components/**/*.api
+Resources/**/*
\ No newline at end of file
diff --git a/Examples/ErJaxWS/WebService_Stateful/woproject/wsresources.exclude.patternset b/Examples/ErJaxWS/WebService_Stateful/woproject/wsresources.exclude.patternset
new file mode 100644
index 00000000000..9435a512320
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/woproject/wsresources.exclude.patternset
@@ -0,0 +1,3 @@
+**/*.woa/**
+**/*.framework/**
+**/*.eomodeld~/**
diff --git a/Examples/ErJaxWS/WebService_Stateful/woproject/wsresources.include.patternset b/Examples/ErJaxWS/WebService_Stateful/woproject/wsresources.include.patternset
new file mode 100644
index 00000000000..234cdc88bb7
--- /dev/null
+++ b/Examples/ErJaxWS/WebService_Stateful/woproject/wsresources.include.patternset
@@ -0,0 +1 @@
+WebServerResources/**/*
diff --git a/Frameworks/Misc/ERJaxWS/.classpath b/Frameworks/Misc/ERJaxWS/.classpath
new file mode 100644
index 00000000000..5b8386b1601
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/.classpath
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Frameworks/Misc/ERJaxWS/.gitignore b/Frameworks/Misc/ERJaxWS/.gitignore
new file mode 100644
index 00000000000..fcc7e7a559b
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/.gitignore
@@ -0,0 +1,6 @@
+target
+bin
+build
+*.xcodeproj
+*.pbxproj
+ant.*
\ No newline at end of file
diff --git a/Frameworks/Misc/ERJaxWS/.project b/Frameworks/Misc/ERJaxWS/.project
new file mode 100644
index 00000000000..44f7fdf506c
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/.project
@@ -0,0 +1,23 @@
+
+
+ ERJaxWS
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.objectstyle.wolips.incrementalbuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.objectstyle.wolips.incrementalframeworknature
+
+
diff --git a/Frameworks/Misc/ERJaxWS/.settings/org.eclipse.core.resources.prefs b/Frameworks/Misc/ERJaxWS/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000000..41c316b762a
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 06 13:07:09 CET 2014
+eclipse.preferences.version=1
+encoding/=UTF-8
+encoding/Components=UTF-8
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/FastInfoset.jar b/Frameworks/Misc/ERJaxWS/Libraries/FastInfoset.jar
new file mode 100644
index 00000000000..01652beaa4d
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/FastInfoset.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/activation.jar b/Frameworks/Misc/ERJaxWS/Libraries/activation.jar
new file mode 100644
index 00000000000..e31e71c1886
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/activation.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/gmbal-api-only.jar b/Frameworks/Misc/ERJaxWS/Libraries/gmbal-api-only.jar
new file mode 100644
index 00000000000..b062fddaf8f
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/gmbal-api-only.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/ha-api.jar b/Frameworks/Misc/ERJaxWS/Libraries/ha-api.jar
new file mode 100644
index 00000000000..4df68e11299
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/ha-api.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/http.jar b/Frameworks/Misc/ERJaxWS/Libraries/http.jar
new file mode 100644
index 00000000000..6e2b44e69af
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/http.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/javax.annotation-api.jar b/Frameworks/Misc/ERJaxWS/Libraries/javax.annotation-api.jar
new file mode 100644
index 00000000000..5c942d70fa4
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/javax.annotation-api.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/javax.xml.soap-api.jar b/Frameworks/Misc/ERJaxWS/Libraries/javax.xml.soap-api.jar
new file mode 100644
index 00000000000..b9f4d5b2380
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/javax.xml.soap-api.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/jaxb-api.jar b/Frameworks/Misc/ERJaxWS/Libraries/jaxb-api.jar
new file mode 100644
index 00000000000..b7728c0b78b
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/jaxb-api.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/jaxb-core.jar b/Frameworks/Misc/ERJaxWS/Libraries/jaxb-core.jar
new file mode 100644
index 00000000000..82b6eb7ac9c
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/jaxb-core.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/jaxb-impl.jar b/Frameworks/Misc/ERJaxWS/Libraries/jaxb-impl.jar
new file mode 100644
index 00000000000..b895c7941bc
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/jaxb-impl.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/jaxb-jxc.jar b/Frameworks/Misc/ERJaxWS/Libraries/jaxb-jxc.jar
new file mode 100644
index 00000000000..0b6f4935a61
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/jaxb-jxc.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/jaxb-xjc.jar b/Frameworks/Misc/ERJaxWS/Libraries/jaxb-xjc.jar
new file mode 100644
index 00000000000..640e0381d4f
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/jaxb-xjc.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/jaxws-api.jar b/Frameworks/Misc/ERJaxWS/Libraries/jaxws-api.jar
new file mode 100644
index 00000000000..b91c91c4320
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/jaxws-api.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/jaxws-rt.jar b/Frameworks/Misc/ERJaxWS/Libraries/jaxws-rt.jar
new file mode 100644
index 00000000000..13a957bd026
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/jaxws-rt.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/jaxws-tools.jar b/Frameworks/Misc/ERJaxWS/Libraries/jaxws-tools.jar
new file mode 100644
index 00000000000..3359344f1b1
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/jaxws-tools.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/jsr173_api.jar b/Frameworks/Misc/ERJaxWS/Libraries/jsr173_api.jar
new file mode 100644
index 00000000000..015169dc71f
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/jsr173_api.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/jsr181-api.jar b/Frameworks/Misc/ERJaxWS/Libraries/jsr181-api.jar
new file mode 100644
index 00000000000..e6833880e2d
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/jsr181-api.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/jsr250-api.jar b/Frameworks/Misc/ERJaxWS/Libraries/jsr250-api.jar
new file mode 100644
index 00000000000..2b10def6448
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/jsr250-api.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/management-api.jar b/Frameworks/Misc/ERJaxWS/Libraries/management-api.jar
new file mode 100644
index 00000000000..f7bbc69a788
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/management-api.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/mimepull.jar b/Frameworks/Misc/ERJaxWS/Libraries/mimepull.jar
new file mode 100644
index 00000000000..48625373217
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/mimepull.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/policy.jar b/Frameworks/Misc/ERJaxWS/Libraries/policy.jar
new file mode 100644
index 00000000000..e688eea4196
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/policy.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/resolver.jar b/Frameworks/Misc/ERJaxWS/Libraries/resolver.jar
new file mode 100644
index 00000000000..0f97dc711b0
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/resolver.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/saaj-api.jar b/Frameworks/Misc/ERJaxWS/Libraries/saaj-api.jar
new file mode 100644
index 00000000000..5a4f436b38c
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/saaj-api.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/saaj-impl.jar b/Frameworks/Misc/ERJaxWS/Libraries/saaj-impl.jar
new file mode 100644
index 00000000000..5ddbbaca33a
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/saaj-impl.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/stax-ex.jar b/Frameworks/Misc/ERJaxWS/Libraries/stax-ex.jar
new file mode 100644
index 00000000000..ab582361325
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/stax-ex.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/stax2-api.jar b/Frameworks/Misc/ERJaxWS/Libraries/stax2-api.jar
new file mode 100644
index 00000000000..63a8a064672
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/stax2-api.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/streambuffer.jar b/Frameworks/Misc/ERJaxWS/Libraries/streambuffer.jar
new file mode 100644
index 00000000000..15674ffb5b1
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/streambuffer.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/woodstox-core-asl.jar b/Frameworks/Misc/ERJaxWS/Libraries/woodstox-core-asl.jar
new file mode 100644
index 00000000000..685132d9cdf
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/woodstox-core-asl.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Libraries/woodstox.jar b/Frameworks/Misc/ERJaxWS/Libraries/woodstox.jar
new file mode 100644
index 00000000000..db7985cf33b
Binary files /dev/null and b/Frameworks/Misc/ERJaxWS/Libraries/woodstox.jar differ
diff --git a/Frameworks/Misc/ERJaxWS/Resources/Properties b/Frameworks/Misc/ERJaxWS/Resources/Properties
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/Frameworks/Misc/ERJaxWS/Sources/er/extensions/appserver/ws/ERJaxWebService.java b/Frameworks/Misc/ERJaxWS/Sources/er/extensions/appserver/ws/ERJaxWebService.java
new file mode 100644
index 00000000000..e17b2736f02
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/Sources/er/extensions/appserver/ws/ERJaxWebService.java
@@ -0,0 +1,458 @@
+package er.extensions.appserver.ws;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import javax.xml.namespace.QName;
+
+import org.apache.log4j.Logger;
+
+import com.sun.istack.NotNull;
+import com.sun.xml.ws.api.BindingID;
+import com.sun.xml.ws.api.message.ExceptionHasMessage;
+import com.sun.xml.ws.api.message.Message;
+import com.sun.xml.ws.api.message.Packet;
+import com.sun.xml.ws.api.pipe.Codec;
+import com.sun.xml.ws.api.pipe.ContentType;
+import com.sun.xml.ws.api.server.DocumentAddressResolver;
+import com.sun.xml.ws.api.server.PortAddressResolver;
+import com.sun.xml.ws.api.server.SDDocument;
+import com.sun.xml.ws.api.server.ServiceDefinition;
+import com.sun.xml.ws.api.server.WSEndpoint;
+import com.sun.xml.ws.api.server.WSEndpoint.PipeHead;
+import com.sun.xml.ws.binding.BindingImpl;
+import com.sun.xml.ws.server.UnsupportedMediaException;
+import com.sun.xml.ws.transport.http.WSHTTPConnection;
+import com.sun.xml.ws.util.ByteArrayBuffer;
+import com.webobjects.appserver.WOApplication;
+import com.webobjects.appserver.WODynamicURL;
+import com.webobjects.appserver.WOMessage;
+import com.webobjects.appserver.WORequest;
+import com.webobjects.appserver.WOResponse;
+
+import er.extensions.appserver.ERXRequest;
+import er.extensions.appserver.ERXResourceManager;
+import er.extensions.appserver.ERXResponse;
+
+/**
+ * @author mstoll
+ *
+ * @param
+ */
+public class ERJaxWebService
+{
+ /**
+ *
+ */
+ public static final Logger webServiceLog =
+ Logger.getLogger("er.extensions.appserver.ws.ERJaxWebServiceRequestHandler.Logging");
+
+ /**
+ *
+ */
+ protected WSEndpoint wsEndpoint;
+ /**
+ *
+ */
+ protected PipeHead pipeHead;
+ /**
+ *
+ */
+ protected Codec codec;
+
+ /**
+ *
+ */
+ protected Map wsdls;
+ /**
+ *
+ */
+ private Map revWsdls;
+
+ public ERJaxWebService(Class implementationClass)
+ {
+ wsEndpoint = WSEndpoint.create(implementationClass, false, null, null, null, null,
+ BindingImpl.create(BindingID.parse(implementationClass)), null, null, null, true);
+ pipeHead = wsEndpoint.createPipeHead();
+ codec = wsEndpoint.createCodec();
+ initWSDLMap(wsEndpoint.getServiceDefinition());
+ }
+
+ /**
+ * @param woRequest
+ * @return
+ */
+ public WOResponse handleRequest(WORequest woRequest)
+ {
+ if(isMetadataQuery(woRequest.queryString()))
+ {
+ SDDocument doc = wsdls.get(woRequest.queryString());
+ if(doc == null)
+ {
+ ERXResponse resp = new ERXResponse();
+ resp.setStatus(WOMessage.HTTP_STATUS_NOT_FOUND);
+ return resp;
+ }
+
+ ERXResponse resp = new ERXResponse();
+
+ resp.setStatus(HttpURLConnection.HTTP_OK);
+ resp.setHeader("text/xml;charset=utf-8", "Content-Type");
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ WODynamicURL du = woRequest._uriDecomposed();
+ String baseUri = String.format("%s/%s.woa/%s/%s",
+ du.adaptorPath(),
+ du.applicationName(),
+ du.requestHandlerKey(),
+ du.requestHandlerPath());
+
+ boolean isSecure;
+
+ if(woRequest instanceof ERXRequest)
+ {
+ isSecure = ((ERXRequest)woRequest).isSecure();
+ } else
+ {
+ isSecure = ERXRequest.isRequestSecure(woRequest);
+ }
+
+ String soapAddress = ERXResourceManager._completeURLForResource(
+ baseUri,
+ isSecure,
+ WOApplication.application().createContextForRequest(woRequest)
+ );
+
+ try
+ {
+ doc.writeTo(new ERPortAddressResolver(soapAddress),
+ new ERDocumentAddressResolver(soapAddress),
+ baos);
+ baos.flush();
+ }
+ catch(IOException e)
+ {
+ }
+
+ resp.setContent(baos.toByteArray());
+
+ return resp;
+ }
+
+ ERWSWOHTTPConnection con = new ERWSWOHTTPConnection(woRequest);
+ try
+ {
+ Packet packet;
+ boolean invoke = false;
+ try
+ {
+ packet = decodePacket(con, codec);
+ invoke = true;
+ }
+ catch(Exception e)
+ {
+ packet = new Packet();
+ if(e instanceof ExceptionHasMessage)
+ {
+ webServiceLog.error(e.getMessage(), e);
+ packet.setMessage(((ExceptionHasMessage)e).getFaultMessage());
+ }
+ else if(e instanceof UnsupportedMediaException)
+ {
+ webServiceLog.error(e.getMessage(), e);
+ con.setStatus(415);
+ }
+ else
+ {
+ webServiceLog.error(e.getMessage(), e);
+ con.setStatus(500);
+ }
+ }
+ if(invoke)
+ {
+ try
+ {
+ packet = pipeHead.process(packet, con.getWebServiceContextDelegate(),
+ packet.transportBackChannel);
+ }
+ catch(Exception e)
+ {
+ webServiceLog.error(e.getMessage(), e);
+ return null;
+ }
+ }
+ try
+ {
+ encodePacket(packet, con, codec);
+ }
+ catch(IOException e)
+ {
+ webServiceLog.error(e.getMessage(), e);
+ }
+ }
+ finally
+ {
+ if(!con.isClosed())
+ {
+ con.close();
+ }
+ }
+
+ return con.generateResponse();
+
+ }
+
+ /**
+ * @param con
+ * @param codec
+ * @return
+ * @throws IOException
+ */
+ private Packet decodePacket(WSHTTPConnection con, Codec codec)
+ throws IOException
+ {
+ String ct = con.getRequestHeader("Content-Type");
+ InputStream in = con.getInput();
+ Packet packet = new Packet();
+ packet.soapAction = fixQuotesAroundSoapAction(con.getRequestHeader("SOAPAction"));
+ packet.wasTransportSecure = con.isSecure();
+ packet.acceptableMimeTypes = con.getRequestHeader("Accept");
+ packet.addSatellite(con);
+ addSatellites(packet);
+ packet.webServiceContextDelegate = con.getWebServiceContextDelegate();
+ codec.decode(in, ct, packet);
+ return packet;
+ }
+
+ /**
+ * @param soapAction
+ * @return
+ */
+ public static String fixQuotesAroundSoapAction(String soapAction)
+ {
+ if(soapAction != null && (!soapAction.startsWith("\"") || !soapAction.endsWith("\"")))
+ {
+ webServiceLog.info("Received WS-I BP non-conformant Unquoted SoapAction HTTP header: " + soapAction);
+ String fixedSoapAction = soapAction;
+ if(!soapAction.startsWith("\""))
+ fixedSoapAction = (new StringBuilder()).append("\"").append(fixedSoapAction).toString();
+ if(!soapAction.endsWith("\""))
+ fixedSoapAction = (new StringBuilder()).append(fixedSoapAction).append("\"").toString();
+ return fixedSoapAction;
+ }
+ else
+ {
+ return soapAction;
+ }
+ }
+
+ /**
+ * @param packet1
+ */
+ protected void addSatellites(Packet packet1)
+ {
+ }
+
+ /**
+ * @param connStatus
+ * @return
+ */
+ private boolean isClientErrorStatus(int connStatus)
+ {
+ return (connStatus == HttpURLConnection.HTTP_FORBIDDEN); // add more for future.
+ }
+
+
+ /**
+ * @param packet
+ * @param con
+ * @param codec
+ * @throws IOException
+ */
+ private void encodePacket(@NotNull Packet packet, @NotNull WSHTTPConnection con, @NotNull Codec codec)
+ throws IOException
+ {
+ Message responseMessage = packet.getMessage();
+
+ if(responseMessage == null)
+ {
+ if(con.getStatus() == 0)
+ {
+ con.setStatus(WSHTTPConnection.ONEWAY);
+ }
+ }
+ else
+ {
+ if(con.getStatus() == 0)
+ {
+ // if the application didn't set the status code,
+ // set the default one.
+ con.setStatus(responseMessage.isFault()
+ ? HttpURLConnection.HTTP_INTERNAL_ERROR
+ : HttpURLConnection.HTTP_OK);
+ }
+
+ if(isClientErrorStatus(con.getStatus()))
+ return;
+
+ ContentType contentType = codec.getStaticContentType(packet);
+ if(contentType != null)
+ {
+ con.setContentTypeResponseHeader(contentType.getContentType());
+ OutputStream os = con.getOutput();
+ codec.encode(packet, os);
+ }
+ else
+ {
+
+ ByteArrayBuffer buf = new ByteArrayBuffer();
+ contentType = codec.encode(packet, buf);
+ con.setContentTypeResponseHeader(contentType.getContentType());
+ OutputStream os = con.getOutput();
+ buf.writeTo(os);
+ }
+ }
+ }
+
+ /**
+ * @param sdef
+ */
+ public final void initWSDLMap(ServiceDefinition sdef)
+ {
+ if(sdef == null)
+ {
+ wsdls = Collections.emptyMap();
+ revWsdls = Collections.emptyMap();
+ }
+ else
+ {
+ wsdls = new HashMap();
+ // wsdl=1 --> Doc
+ // Sort WSDL, Schema documents based on SystemId so that the same
+ // document gets wsdl=x mapping
+ Map systemIds = new TreeMap();
+ for(SDDocument sdd : sdef)
+ {
+ if(sdd == sdef.getPrimary())
+ {
+ // No sorting for Primary WSDL
+ wsdls.put("wsdl", sdd);
+ wsdls.put("WSDL", sdd);
+ }
+ else
+ {
+ systemIds.put(sdd.getURL().toString(), sdd);
+ }
+ }
+
+ int wsdlnum = 1;
+ int xsdnum = 1;
+ for(Map.Entry e : systemIds.entrySet())
+ {
+ SDDocument sdd = e.getValue();
+ if(sdd.isWSDL())
+ {
+ wsdls.put("wsdl=" + (wsdlnum++), sdd);
+ }
+ if(sdd.isSchema())
+ {
+ wsdls.put("xsd=" + (xsdnum++), sdd);
+ }
+ }
+
+ revWsdls = new HashMap(); // Doc --> wsdl=1
+ for(Entry e : wsdls.entrySet())
+ {
+ if(!e.getKey().equals("WSDL"))
+ { // map Doc --> wsdl, not WSDL
+ revWsdls.put(e.getValue(), e.getKey());
+ }
+ }
+ }
+ }
+
+ /**
+ * @param query
+ * @return
+ */
+ private boolean isMetadataQuery(String query)
+ {
+ // we intentionally return true even if documents don't exist,
+ // so that they get 404.
+ return query != null && (query.equals("WSDL") || query.startsWith("wsdl") || query.startsWith("xsd="));
+ }
+
+ /**
+ * @author mstoll
+ *
+ */
+ final class ERPortAddressResolver
+ extends PortAddressResolver
+ {
+ /**
+ *
+ */
+ String base;
+
+ /**
+ * @param base
+ */
+ public ERPortAddressResolver(String base)
+ {
+ super();
+ this.base = base;
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.api.server.PortAddressResolver#getAddressFor(javax.xml.namespace.QName, java.lang.String)
+ */
+ @Override
+ public String getAddressFor(QName qname, String s)
+ {
+ return base;
+ }
+ };
+
+ /**
+ * @author mstoll
+ *
+ */
+ final class ERDocumentAddressResolver
+ implements
+ DocumentAddressResolver
+ {
+ /**
+ *
+ */
+ String base;
+
+ /**
+ * @param base
+ */
+ public ERDocumentAddressResolver(String base)
+ {
+ super();
+ this.base = base;
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.api.server.DocumentAddressResolver#getRelativeAddressFor(com.sun.xml.ws.api.server.SDDocument, com.sun.xml.ws.api.server.SDDocument)
+ */
+ @Override
+ public String getRelativeAddressFor(SDDocument sddocument, SDDocument referenced)
+ {
+ assert (revWsdls.containsKey(referenced));
+ return base + '?' + ((String)revWsdls.get(referenced));
+ }
+ };
+
+}
diff --git a/Frameworks/Misc/ERJaxWS/Sources/er/extensions/appserver/ws/ERJaxWebServiceRequestHandler.java b/Frameworks/Misc/ERJaxWS/Sources/er/extensions/appserver/ws/ERJaxWebServiceRequestHandler.java
new file mode 100644
index 00000000000..d22d2a01536
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/Sources/er/extensions/appserver/ws/ERJaxWebServiceRequestHandler.java
@@ -0,0 +1,78 @@
+package er.extensions.appserver.ws;
+
+import com.webobjects.appserver.WORequest;
+import com.webobjects.appserver.WOResponse;
+import com.webobjects.appserver._private.WODirectActionRequestHandler;
+import com.webobjects.foundation.NSArray;
+import com.webobjects.foundation.NSMutableDictionary;
+
+/**
+ * The WebObject request handler that maps a WORequest to a JaxWS request.
+ * This class uses the existing JaxWS mechanism for handling Servlet requests.
+ *
+ *
+ * to register your own WebServices, you have to instanciate this class in your
+ * Application and bind this to a request handler key:
+ *
+ *
+ * ERJaxWebServiceRequestHandler wsHandler = new ERJaxWebServiceRequestHandler()
+ * registerRequestHandler(wsHandler, this.webServiceRequestHandlerKey());
+ *
+ *
+ * To this ERJaxWebServiceRequestHandler you can bind single WebServices, for example:
+ *
+ *
+ * wsHandler.registerWebService("TestWS", new ERJaxWebService(TestWSImpl.class));
+ *
+ *
+ * This binds the implementation "TestWSImpl" to the given service name.
+ *
+ * This example can be called using this URL:
+ *
+ *
+ * http://hostname/adapterpath/appname/ws/TestWS
+ *
+ *
+ * Appending the parameter "?wsdl" will return the full WSDL for this WebService.
+ *
+ */
+public class ERJaxWebServiceRequestHandler
+ extends WODirectActionRequestHandler
+{
+ /** a dictionary where all WebService registrations are kept */
+ protected NSMutableDictionary> registeredWebServices =
+ new NSMutableDictionary>();
+
+ /**
+ * Register a WebService implementation under a given service name
+ *
+ * @param serviceName the given servicename, a existing service for this name will be replaced
+ * @param webService the ERXJaxWebService object, holding the implementation for the referred service
+ */
+ public void registerWebService(String serviceName, ERJaxWebService extends Object> webService)
+ {
+ registeredWebServices.put(serviceName, webService);
+ }
+
+ /* (non-Javadoc)
+ * @see com.webobjects.appserver._private.WOActionRequestHandler#handleRequest(com.webobjects.appserver.WORequest)
+ */
+ @Override
+ public WOResponse handleRequest(WORequest aRequest)
+ {
+ NSArray requestHandlerPath = aRequest.requestHandlerPathArray();
+ String serviceName = requestHandlerPath.objectAtIndex(0);
+
+ ERJaxWebService extends Object> ws = registeredWebServices.get(serviceName);
+ if(ws != null)
+ {
+ WOResponse resp = ws.handleRequest(aRequest);
+ if(resp != null)
+ return resp;
+
+ return nullResponse();
+ }
+
+ return nullResponse();
+ }
+}
diff --git a/Frameworks/Misc/ERJaxWS/Sources/er/extensions/appserver/ws/ERWSWOHTTPConnection.java b/Frameworks/Misc/ERJaxWS/Sources/er/extensions/appserver/ws/ERWSWOHTTPConnection.java
new file mode 100644
index 00000000000..959787f4dec
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/Sources/er/extensions/appserver/ws/ERWSWOHTTPConnection.java
@@ -0,0 +1,336 @@
+package er.extensions.appserver.ws;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+import com.sun.istack.NotNull;
+import com.sun.xml.ws.api.PropertySet;
+import com.sun.xml.ws.api.server.WebServiceContextDelegate;
+import com.sun.xml.ws.transport.http.WSHTTPConnection;
+import com.webobjects.appserver.WOApplication;
+import com.webobjects.appserver.WOContext;
+import com.webobjects.appserver.WORequest;
+import com.webobjects.appserver.WOResponse;
+import com.webobjects.appserver.WOSession;
+
+import er.extensions.appserver.ERXRequest;
+import er.extensions.appserver.ERXResponse;
+import er.extensions.appserver.ERXWOContext;
+
+
+/**
+ * @author mstoll
+ *
+ * This class maps ERXRequest/ERXResponse to a WSHTTPConnection
+ * This enables to jump into the request handling mechanism of JaxWS
+ * for handling WebServices from a Servlet.
+ *
+ */
+public class ERWSWOHTTPConnection
+ extends WSHTTPConnection
+{
+ public static final String ERJAXWS_WOCONTEXT = "com.webobjects.appserver.WOContext";
+ public static final String ERJAXWS_ERXWOCONTEXT = "er.extensions.appserver.ERXWOContext";
+
+ /** the current ERXRequest */
+ ERXRequest woRequest;
+
+ /** the output stream JaxWS writes into */
+ ByteArrayOutputStream responseOutputStream = new ByteArrayOutputStream();
+
+ /** the HTTP result status, being set from JaxWS
+ * to be handed into ERXResponse
+ */
+ int responseStatus = 0;
+
+ /** the current ERXResponse */
+ ERXResponse woResponse;
+
+ /** the associated session **/
+ WOSession session = null;
+
+ private static final PropertySet.PropertyMap model = parse(ERWSWOHTTPConnection.class);
+
+ /**
+ * The constructor
+ * @param req the current ERXRequest for this RR cycle
+ */
+ public ERWSWOHTTPConnection(WORequest req)
+ {
+ woRequest = (ERXRequest)req;
+ woResponse = new ERXResponse();
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#getInput()
+ */
+ @Override
+ public InputStream getInput() throws IOException
+ {
+ return woRequest.content().stream();
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#getOutput()
+ */
+ @Override
+ public OutputStream getOutput() throws IOException
+ {
+ return responseOutputStream;
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#getPathInfo()
+ */
+ @Override
+ public String getPathInfo()
+ {
+ return "";
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#getQueryString()
+ */
+ @Override
+ public String getQueryString()
+ {
+ return woRequest.queryString();
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#getRequestHeader(java.lang.String)
+ */
+ @Override
+ public String getRequestHeader(String s)
+ {
+ return woRequest.headerForKey(s);
+ }
+
+// JAX 2.2 methods
+// @Override
+// public Set getRequestHeaderNames()
+// {
+// // TODO Auto-generated method stub
+// return null;
+// }
+//
+// @Override
+// public List getRequestHeaderValues(String s)
+// {
+// // TODO Auto-generated method stub
+// return null;
+// }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#getRequestHeaders()
+ */
+ @SuppressWarnings({
+ "rawtypes", "unchecked"
+ })
+ @PropertySet.Property({ "javax.xml.ws.http.request.headers",
+ "com.sun.xml.ws.api.message.packet.inbound.transport.headers" })
+ @NotNull
+ @Override
+ public Map> getRequestHeaders()
+ {
+ return (Map)woRequest.headers();
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#getRequestMethod()
+ */
+ @Override
+ public String getRequestMethod()
+ {
+ return woRequest.method();
+ }
+
+// JAX 2.2 methods
+// @Override
+// public String getRequestScheme()
+// {
+// // TODO Auto-generated method stub
+// return null;
+// }
+//
+// @Override
+// public String getRequestURI()
+// {
+// // TODO Auto-generated method stub
+// return null;
+// }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#getResponseHeaders()
+ */
+ @PropertySet.Property({ "javax.xml.ws.http.response.headers",
+ "com.sun.xml.ws.api.message.packet.outbound.transport.headers" })
+ @Override
+ public Map> getResponseHeaders()
+ {
+ return null;
+ }
+
+// @Override
+// public String getServerName()
+// {
+// // TODO Auto-generated method stub
+// return null;
+// }
+//
+// @Override
+// public int getServerPort()
+// {
+// // TODO Auto-generated method stub
+// return 0;
+// }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#getStatus()
+ */
+ @Override
+ public int getStatus()
+ {
+ return responseStatus;
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#getWebServiceContextDelegate()
+ */
+ @Override
+ public WebServiceContextDelegate getWebServiceContextDelegate()
+ {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#isSecure()
+ */
+ @Override
+ public boolean isSecure()
+ {
+ return woRequest.isSecure();
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#setContentTypeResponseHeader(java.lang.String)
+ */
+ @Override
+ public void setContentTypeResponseHeader(String s)
+ {
+ woResponse.setHeader(s, "Content-Type");
+ }
+
+// @Override
+// public void setResponseHeader(String s, List list)
+// {
+// // TODO Auto-generated method stub
+//
+// }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#setResponseHeaders(java.util.Map)
+ */
+ @Override
+ public void setResponseHeaders(Map> map)
+ {
+ woResponse.setHeaders(map);
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.transport.http.WSHTTPConnection#setStatus(int)
+ */
+ @Override
+ public void setStatus(int i)
+ {
+ responseStatus = i;
+ }
+
+ /* (non-Javadoc)
+ * @see com.sun.xml.ws.api.PropertySet#getPropertyMap()
+ */
+ @Override
+ protected PropertySet.PropertyMap getPropertyMap()
+ {
+ return model;
+ }
+
+ /**
+ * Generate the response after the ERXRequest has been treaten by JaxWS
+ *
+ * @return the generated ERXResponse
+ */
+ public WOResponse generateResponse()
+ {
+ try
+ {
+ responseOutputStream.flush();
+ woResponse.setStatus(responseStatus);
+ woResponse.setContent(responseOutputStream.toByteArray());
+
+ if(context != null && context._session() != null)
+ {
+ context._session().setStoresIDsInCookies(true);
+ context._session()._appendCookieToResponse(woResponse);
+ WOApplication.application().saveSessionForContext(context);
+
+ woResponse._finalizeInContext(context);
+ }
+ }
+ catch(IOException e)
+ {
+ Logger.getLogger("er.extensions.appserver.ws.ERJaxWebServiceRequestHandler.Logging").error("Exception on writing response", e);
+ return null;
+ }
+
+ return woResponse;
+ }
+
+ private WOContext context = null;
+
+ @PropertySet.Property({ "com.webobjects.appserver.WOContext" })
+ public synchronized WOContext WOContext()
+ {
+ if(context == null)
+ {
+ synchronized (this)
+ {
+ if(context == null)
+ {
+ context = WOApplication.application().createContextForRequest(woRequest);
+
+ String sessionID = getSessionIDFromCookie();
+ if(sessionID != null)
+ context._setRequestSessionID(sessionID);
+ }
+ }
+ }
+
+ return context;
+ }
+
+ @PropertySet.Property({ "er.extensions.appserver.ERXWOContext" })
+ public synchronized ERXWOContext ERXWOContext()
+ {
+ WOContext c = WOContext();
+
+ if(c instanceof ERXWOContext)
+ {
+ return (ERXWOContext)c;
+ }
+
+ throw new IllegalArgumentException("WOContext is no sublass of ERXWOContext");
+ }
+
+ private String getSessionIDFromCookie()
+ {
+ return woRequest.cookieValueForKey(WOApplication.application().sessionIdKey());
+ }
+
+}
diff --git a/Frameworks/Misc/ERJaxWS/build.properties b/Frameworks/Misc/ERJaxWS/build.properties
new file mode 100644
index 00000000000..51ceaaeb63e
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/build.properties
@@ -0,0 +1,16 @@
+classes.dir = bin
+project.name=ERJaxWS
+project.name.lowercase=erjaxws
+project.type=framework
+principalClass =
+customInfoPListContent =
+embed.Local=true
+embed.System=true
+eoAdaptorClassName =
+cfBundleVersion =
+cfBundleShortVersion =
+cfBundleID = org.mywoapp
+javaVersion = 1.5+
+component.wellFormedTemplateRequired=true
+component.inlineBindingPrefix=[
+component.inlineBindingSuffix=]
\ No newline at end of file
diff --git a/Frameworks/Misc/ERJaxWS/build.xml b/Frameworks/Misc/ERJaxWS/build.xml
new file mode 120000
index 00000000000..0f8b528f5ed
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/build.xml
@@ -0,0 +1 @@
+../../../Build/build/build-framework-template.xml
\ No newline at end of file
diff --git a/Frameworks/Misc/ERJaxWS/woproject/classes.exclude.patternset b/Frameworks/Misc/ERJaxWS/woproject/classes.exclude.patternset
new file mode 100644
index 00000000000..56fb545fa67
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/woproject/classes.exclude.patternset
@@ -0,0 +1 @@
+build.properties
diff --git a/Frameworks/Misc/ERJaxWS/woproject/classes.include.patternset b/Frameworks/Misc/ERJaxWS/woproject/classes.include.patternset
new file mode 100644
index 00000000000..3179091db39
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/woproject/classes.include.patternset
@@ -0,0 +1,2 @@
+**/*.class
+*.properties
diff --git a/Frameworks/Misc/ERJaxWS/woproject/resources.exclude.patternset b/Frameworks/Misc/ERJaxWS/woproject/resources.exclude.patternset
new file mode 100644
index 00000000000..905050dfb73
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/woproject/resources.exclude.patternset
@@ -0,0 +1,3 @@
+**/*.eomodeld~/
+**/*.woa/**
+**/*.framework/**
diff --git a/Frameworks/Misc/ERJaxWS/woproject/resources.include.patternset b/Frameworks/Misc/ERJaxWS/woproject/resources.include.patternset
new file mode 100644
index 00000000000..611978755e2
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/woproject/resources.include.patternset
@@ -0,0 +1,3 @@
+Components/**/*.wo/**/*
+Components/**/*.api
+Resources/**/*
\ No newline at end of file
diff --git a/Frameworks/Misc/ERJaxWS/woproject/wsresources.exclude.patternset b/Frameworks/Misc/ERJaxWS/woproject/wsresources.exclude.patternset
new file mode 100644
index 00000000000..9435a512320
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/woproject/wsresources.exclude.patternset
@@ -0,0 +1,3 @@
+**/*.woa/**
+**/*.framework/**
+**/*.eomodeld~/**
diff --git a/Frameworks/Misc/ERJaxWS/woproject/wsresources.include.patternset b/Frameworks/Misc/ERJaxWS/woproject/wsresources.include.patternset
new file mode 100644
index 00000000000..234cdc88bb7
--- /dev/null
+++ b/Frameworks/Misc/ERJaxWS/woproject/wsresources.include.patternset
@@ -0,0 +1 @@
+WebServerResources/**/*
diff --git a/Frameworks/Misc/pom.xml b/Frameworks/Misc/pom.xml
index dae721501d6..fcc33b5e46c 100644
--- a/Frameworks/Misc/pom.xml
+++ b/Frameworks/Misc/pom.xml
@@ -16,6 +16,7 @@
ERDistribution
ERChronic
ERFirebug
+ ERJaxWS
ERPDFGeneration
ERPersistentSessionStorage
ERProfiling
@@ -27,4 +28,4 @@
WOJRebel
WOLips
-
\ No newline at end of file
+
diff --git a/pom.xml b/pom.xml
index 088a8fd54cb..9bbeffadf74 100644
--- a/pom.xml
+++ b/pom.xml
@@ -316,6 +316,11 @@
ERDivaliteLook
${project.version}
+
+ wonder.misc
+ ERJaxWS
+ ${project.version}
+
wonder.eoadaptors
JavaMemoryAdaptor