[jboss-svn-commits] JBL Code SVN: r22437 - labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Sep 5 09:07:41 EDT 2008
Author: kevin.conner at jboss.com
Date: 2008-09-05 09:07:41 -0400 (Fri, 05 Sep 2008)
New Revision: 22437
Modified:
labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java
labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceEndpointInfo.java
labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java
Log:
Fix oneway behaviour: JBESB-1985
Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java 2008-09-05 11:25:21 UTC (rev 22436)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java 2008-09-05 13:07:41 UTC (rev 22437)
@@ -36,6 +36,8 @@
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPMessage;
import javax.xml.transform.stream.StreamResult;
+import javax.xml.ws.Provider;
+import javax.xml.ws.WebServiceException;
import org.apache.log4j.Logger;
import org.jboss.soa.esb.client.ServiceInvoker;
@@ -60,7 +62,7 @@
* This is the abstract base class for a SOAP messages
* @author kevin
*/
-public abstract class BaseWebService
+public abstract class BaseWebService implements Provider<SOAPMessage>
{
private static final QName SERVER_FAULT_QN = new QName("http://schemas.xmlsoap.org/soap/envelope/", "Server") ;
@@ -78,17 +80,15 @@
securityExtractor = new WSSecuritySoapExtractor();
}
- public Object invoke(final Object obj)
- throws SOAPException
+ public SOAPMessage invoke(final SOAPMessage request)
{
- final SOAPMessage request = (SOAPMessage)obj;
final Message esbReq = MessageFactory.getInstance().getMessage() ;
try
{
final SOAPBody soapBody = request.getSOAPBody() ;
if (soapBody == null)
{
- throw new SOAPException("Missing SOAP body from request") ;
+ throw new WebServiceException("Missing SOAP body from request") ;
}
// There is a bug in JBossWS extractContentAsDocument so we do this ourselves
final Iterator children = soapBody.getChildElements() ;
@@ -136,55 +136,67 @@
}
else
{
- return null ;
+ // We should be able to return null here but this causes JBossWS to NPE.
+ return javax.xml.soap.MessageFactory.newInstance().createMessage();
}
- }
+ }
+ catch (final WebServiceException wse)
+ {
+ throw wse ;
+ }
catch (final Exception ex)
{
- SOAPMessage faultMsg = null;
- if (ex instanceof FaultMessageException)
+ try
{
- final FaultMessageException fme = (FaultMessageException) ex ;
- final Message faultMessage = fme.getReturnedMessage() ;
- if (faultMessage != null)
+ SOAPMessage faultMsg = null;
+ if (ex instanceof FaultMessageException)
{
- final Body body = faultMessage.getBody() ;
- final QName faultCode = (QName)body.get(Fault.DETAIL_CODE_CONTENT) ;
- final String faultDescription = (String)body.get(Fault.DETAIL_DESCRIPTION_CONTENT) ;
- final String faultDetail = (String)body.get(Fault.DETAIL_DETAIL_CONTENT) ;
-
- if (faultCode != null)
+ final FaultMessageException fme = (FaultMessageException) ex ;
+ final Message faultMessage = fme.getReturnedMessage() ;
+ if (faultMessage != null)
{
- faultMsg = javax.xml.soap.MessageFactory.newInstance().createMessage() ;
- final SOAPFault fault = faultMsg.getSOAPBody().addFault(faultCode, faultDescription) ;
- if (faultDetail != null)
+ final Body body = faultMessage.getBody() ;
+ final QName faultCode = (QName)body.get(Fault.DETAIL_CODE_CONTENT) ;
+ final String faultDescription = (String)body.get(Fault.DETAIL_DESCRIPTION_CONTENT) ;
+ final String faultDetail = (String)body.get(Fault.DETAIL_DETAIL_CONTENT) ;
+
+ if (faultCode != null)
{
- try
+ faultMsg = javax.xml.soap.MessageFactory.newInstance().createMessage() ;
+ final SOAPFault fault = faultMsg.getSOAPBody().addFault(faultCode, faultDescription) ;
+ if (faultDetail != null)
{
- final Document detailDoc = YADOMUtil.parseStream(new ByteArrayInputStream(faultDetail.getBytes()),
- false, false, true);
- final Detail detail = fault.addDetail() ;
- detail.appendChild(detailDoc.getDocumentElement()) ;
+ try
+ {
+ final Document detailDoc = YADOMUtil.parseStream(new ByteArrayInputStream(faultDetail.getBytes()),
+ false, false, true);
+ final Detail detail = fault.addDetail() ;
+ detail.appendChild(detailDoc.getDocumentElement()) ;
+ }
+ catch (final Exception ex2)
+ {
+ LOGGER.warn("Failed to parse fault detail", ex2) ;
+ }
}
- catch (final Exception ex2)
- {
- LOGGER.warn("Failed to parse fault detail", ex2) ;
- }
}
+ else
+ {
+ final Throwable cause = fme.getCause() ;
+ faultMsg = (cause != null) ? generateFault(cause) : generateFault(ex) ;
+ }
}
- else
- {
- final Throwable cause = fme.getCause() ;
- faultMsg = (cause != null) ? generateFault(cause) : generateFault(ex) ;
- }
}
+
+ if (faultMsg == null)
+ {
+ faultMsg = generateFault(ex) ;
+ }
+ return faultMsg ;
}
-
- if (faultMsg == null)
+ catch (final SOAPException soape)
{
- faultMsg = generateFault(ex) ;
+ throw new WebServiceException("Unexpected exception generating fault response", soape) ;
}
- return faultMsg ;
}
}
Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceEndpointInfo.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceEndpointInfo.java 2008-09-05 11:25:21 UTC (rev 22436)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceEndpointInfo.java 2008-09-05 13:07:41 UTC (rev 22437)
@@ -71,16 +71,23 @@
final Actions actions = service.getActions() ;
if (actions != null)
{
- isOneWay = MepType.ONE_WAY.equals(actions.getMep()) ;
+ isOneWay = (actions.getOutXsd() == null) ;
+ if (isOneWay)
+ {
+ if (actions.getFaultXsd() != null)
+ {
+ LOGGER.warn("Fault schemas ignored for OneWay service " + serviceCategory + ":" + serviceName) ;
+ }
+ if (MepType.REQUEST_RESPONSE.equals(actions.getMep()))
+ {
+ LOGGER.warn("No response specified for RequestResponse service " + serviceCategory + ":" + serviceName) ;
+ }
+ }
}
else
{
isOneWay = false ;
}
- if (isOneWay && (actions.getFaultXsd() != null))
- {
- LOGGER.warn("Fault schemas ignored for OneWay service " + serviceCategory + ":" + serviceName) ;
- }
}
public String getRequestName() {
Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java 2008-09-05 11:25:21 UTC (rev 22436)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java 2008-09-05 13:07:41 UTC (rev 22437)
@@ -26,7 +26,6 @@
import javassist.NotFoundException;
import javassist.bytecode.AnnotationsAttribute;
import javassist.bytecode.ConstPool;
-import javassist.bytecode.SignatureAttribute;
import javassist.bytecode.annotation.Annotation;
import javassist.bytecode.annotation.EnumMemberValue;
import javassist.bytecode.annotation.StringMemberValue;
@@ -71,9 +70,6 @@
{
seiClass.setSuperclass(requestResponseSuperClass) ;
}
-
- CtClass providerClass = pool.get("javax.xml.ws.Provider");
- seiClass.setInterfaces(new CtClass[] { providerClass });
ConstPool constantPool = seiClass.getClassFile().getConstPool();
AnnotationsAttribute attribute = new AnnotationsAttribute(
@@ -120,12 +116,6 @@
defaultConstructor.setBody(constructorStr) ;
seiClass.addConstructor(defaultConstructor) ;
- // add generics for class
- SignatureAttribute signatureAttribute = new SignatureAttribute(
- seiClass.getClassFile().getConstPool(),
- "Ljava/lang/Object;Ljavax/xml/ws/Provider<Ljavax/xml/soap/SOAPMessage;>;");
- seiClass.getClassFile().addAttribute(signatureAttribute);
-
return seiClass.toBytecode();
} catch (Exception e) {
More information about the jboss-svn-commits
mailing list