Author: dkulp
Date: Sun May 27 20:11:14 2007
New Revision: 542093
URL: http://svn.apache.org/viewvc?view=rev&rev=542093
Log:
JWS allows Request/ResponseWrappers that point to schemas that don't meet the
JAX-WS spec. (can have element refs) Add support for that.
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/BindingOperationInfo.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/BindingOperationInfo.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/BindingOperationInfo.java?view=diff&rev=542093&r1=542092&r2=542093
==============================================================================
---
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/BindingOperationInfo.java
(original)
+++
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/BindingOperationInfo.java
Sun May 27 20:11:14 2007
@@ -77,6 +77,12 @@
opHolder = wrapped;
}
+ public void updateUnwrappedOperation() {
+ if (opInfo.isUnwrappedCapable()
+ && opHolder == null) {
+ opHolder = new BindingOperationInfo(bindingInfo,
opInfo.getUnwrappedOperation(), this);
+ }
+ }
public BindingInfo getBinding() {
return bindingInfo;
Modified:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java?view=diff&rev=542093&r1=542092&r2=542093
==============================================================================
---
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
(original)
+++
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
Sun May 27 20:11:14 2007
@@ -598,10 +598,10 @@
copyExtensors(finfo, entry.getValue().getExtensibilityElements());
copyExtensionAttributes(finfo, entry.getValue());
}
- checkForWrapped(opInfo);
+ checkForWrapped(opInfo, false);
}
- private void checkForWrapped(OperationInfo opInfo) {
+ public static void checkForWrapped(OperationInfo opInfo, boolean
allowRefs) {
MessageInfo inputMessage = opInfo.getInput();
MessageInfo outputMessage = opInfo.getOutput();
boolean passedRule = true;
@@ -671,7 +671,8 @@
if (inputEl.getSchemaType() instanceof XmlSchemaComplexType) {
xsct = (XmlSchemaComplexType)inputEl.getSchemaType();
if (hasAttributes(xsct)
- || !isWrappableSequence(xsct,
inputEl.getQName().getNamespaceURI(), unwrappedInput)) {
+ || !isWrappableSequence(xsct,
inputEl.getQName().getNamespaceURI(),
+ unwrappedInput, allowRefs)) {
passedRule = false;
}
} else {
@@ -688,7 +689,8 @@
if (outputEl != null && outputEl.getSchemaType() instanceof
XmlSchemaComplexType) {
xsct = (XmlSchemaComplexType)outputEl.getSchemaType();
if (hasAttributes(xsct)
- || !isWrappableSequence(xsct,
outputEl.getQName().getNamespaceURI(), unwrappedOutput)) {
+ || !isWrappableSequence(xsct,
outputEl.getQName().getNamespaceURI(),
+ unwrappedOutput, allowRefs)) {
passedRule = false;
}
} else {
@@ -707,7 +709,7 @@
}
}
- private boolean hasAttributes(XmlSchemaComplexType complexType) {
+ private static boolean hasAttributes(XmlSchemaComplexType complexType) {
// Now lets see if we have any attributes...
// This should probably look at the restricted and substitute types
too.
if (complexType.getAnyAttribute() != null ||
complexType.getAttributes().getCount() > 0) {
@@ -716,7 +718,8 @@
return false;
}
- private boolean isWrappableSequence(XmlSchemaComplexType type, String
namespaceURI, MessageInfo wrapper) {
+ private static boolean isWrappableSequence(XmlSchemaComplexType type,
String namespaceURI,
+ MessageInfo wrapper, boolean
allowRefs) {
if (type.getParticle() instanceof XmlSchemaSequence) {
XmlSchemaSequence seq = (XmlSchemaSequence)type.getParticle();
XmlSchemaObjectCollection items = seq.getItems();
@@ -738,7 +741,9 @@
mpi.setTypeQName(el.getRefName());
mpi.setXmlSchema(el);
//element reference is not permitted for wrapper element
- ret = false;
+ if (!allowRefs) {
+ ret = false;
+ }
} else {
// anonymous type
MessagePartInfo mpi = wrapper.addMessagePart(new
QName(namespaceURI, el.getName()));
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java?view=diff&rev=542093&r1=542092&r2=542093
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
(original)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
Sun May 27 20:11:14 2007
@@ -151,7 +151,6 @@
@Override
protected void initializeWSDLOperation(InterfaceInfo intf, OperationInfo
o, Method method) {
method =
((JaxWsServiceConfiguration)jaxWsConfiguration).getDeclaredMethod(method);
-
super.initializeWSDLOperation(intf, o, method);
initializeWrapping(o, method);
@@ -327,6 +326,13 @@
*/
protected void initializeClassInfo(OperationInfo o, Method method,
List<String> paramOrder) {
if (isWrapped(method)) {
+ if (o.getUnwrappedOperation() == null) {
+ //the "normal" algorithm didn't allow for unwrapping,
+ //but the annotations say unwrap this. We'll need to
+ //make it.
+ WSDLServiceBuilder.checkForWrapped(o, true);
+ }
+
if (o.hasInput()) {
MessageInfo input = o.getInput();
MessagePartInfo part = input.getMessageParts().get(0);
Modified:
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java?view=diff&rev=542093&r1=542092&r2=542093
==============================================================================
---
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
(original)
+++
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
Sun May 27 20:11:14 2007
@@ -59,6 +59,8 @@
import org.apache.cxf.service.invoker.Invoker;
import org.apache.cxf.service.invoker.LocalFactory;
import org.apache.cxf.service.model.AbstractMessageContainer;
+import org.apache.cxf.service.model.BindingInfo;
+import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.service.model.FaultInfo;
import org.apache.cxf.service.model.InterfaceInfo;
@@ -301,6 +303,15 @@
}
initializeWSDLOperation(intf, o, selected);
+ }
+
+ //Some of the operations may have switched from unwrapped to wrapped.
Update the bindings.
+ for (ServiceInfo service : getService().getServiceInfos()) {
+ for (BindingInfo bi : service.getBindings()) {
+ for (BindingOperationInfo binfo : bi.getOperations()) {
+ binfo.updateUnwrappedOperation();
+ }
+ }
}
}