You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by Mark Whitlock <ma...@uk.ibm.com> on 2005/07/04 16:45:13 UTC
FW: Exception model (more thoughts)
Hi Dushshantha,
STL is being removed from the Axis C++ external API (AXISCPP-681 and
others). If you are OK with this, please could you make m_sMessage a const
char* instead of a std::string? I realise this involves more code but it
helps to avoid incompatibilities in the STL.
Thanks,
Mark
Mark Whitlock
IBM
----- Forwarded by Mark Whitlock/UK/IBM on 04/07/2005 14:56 -----
Mark
Whitlock/UK/IBM
To
04/07/2005 14:41 axis-c-dev@ws.apache.org
cc
Subject
Re: FW: Exception model
Hi Dushshantha,
Try adding in
ws-axis\c\tools\org\apache\axis\tools\cbindings\cbindinggenerator.conf the
line
excludemethod=AxisException::AxisException
The problem is that the tool that generates the header files for the C
bindings does not support overloaded constructors. So the proper fix is to
change
ws-axis\c\tools\org\apache\axis\tools\cbindings\CBindingGenerator.java
generateFunctionPrototype to support overloaded constructors. There is
support in there for overloading other methods, but this needs some fixing
as well. I hope to work on this whole area in the autumn.
The simple workaround is to add to
ws-axis\c\tools\org\apache\axis\tools\cbindings\cbindinggenerator.conf the
line excludemethod=AxisException::AxisException which should stop C
bindings being generated for any AxisException constructor. If that doesn't
work, exclude the AxisException file instead. This is probably a good fix
since I can't see why C applications would need to construct
AxisExceptions.
Please get back to me if you still have problems,
Mark
Mark Whitlock
IBM
----- Forwarded by Mark Whitlock/UK/IBM on 04/07/2005 13:38 -----
"Dushshantha
Chandradasa"
<dchandradasa@vir To
tusa.com> "Apache AXIS C Developers List"
<ax...@ws.apache.org>
04/07/2005 11:11 cc
Subject
Please respond to FW: Exception model
"Apache AXIS C
Developers List"
Hi All,
I tried modifying the current exception model to the one that Samisa
explained below. I introduced 2 constructors to AxisException base class;
one is a copy constructor with following code
AxisException(const AxisException& e):m_iExceptionCode(e.m_iExceptionCode),
m_sMessage(e.m_sMessage){};
And the other one is with following code
AxisException(const int iExceptionCode, const char* pcMessage =
NULL):m_iExceptionCode(iExceptionCode)
{
if(pcMessage)
m_sMessage = std::string(pcMessage);
else
m_sMessage = "";
}
And changed the child inherited classes accordingly.
But this change leads me to have C support break with following Error
messages.
[cc] AxisExceptionC.cpp
[cc] C:\obj\include\axis/AxisException.h(180) : error C2733: second
C lin
kage of overloaded function 'axiscCreateAxisException' not allowed
[cc] C:\obj\include\axis/AxisException.h(179) : see
declaration o
f 'axiscCreateAxisException'
[cc] C:\obj\include\axis/AxisException.h(190) : error C2143: syntax
error
: missing ',' before '*'
[cc] C:\obj\include\axis/AxisException.h(190) : error C2059: syntax
error
: '*'
[cc] C:\obj\include\axis/AxisException.h(190) : error C2733: second
C lin
kage of overloaded function 'axiscCreateAxisException' not allowed
[cc] C:\obj\include\axis/AxisException.h(190) : see
declaration o
f 'axiscCreateAxisException'
[cc] Generating Code...
BUILD FAILED
C:\axiscpp\ws-axis\c\build.xml:213: The following error occurred while
executing
this line:
C:\axiscpp\ws-axis\c\build\buildTools.xml:85: cl failed with return code 2
Any thoughts please..
Regards,
Dushshantha
From: Samisa Abeysinghe [mailto:SAbeysinghe@virtusa.com]
Sent: Monday, July 04, 2005 11:22 AM
To: Apache AXIS C Developers List
Subject: Exception model
Hi All,
PFA the class diagram of current exception model we have.
Looking into the several issues we have against the exception
model, it is worth considering a re-arrangement here.
http://issues.apache.org/jira/browse/AXISCPP-707
http://issues.apache.org/jira/browse/AXISCPP-721
http://issues.apache.org/jira/browse/AXISCPP-722
The idea is *very* simple here. (basic OO stuff)
1. We have m_sMessage and m_iExceptionCode as data members
in all the derived classes – move them to base class. Move the
access methods to the base class as well.
2. Drop all processException() methods and move the logic to
constructor
3. getMessage() methods in the derived classes do not get
the message rather return the message corresponding to the
exception code. Hence rename getMessage()
getMessageForExceptionCode()
4. We have “what()” in the base class to get the error
message. This is a virtual method inherited from the ‘exception’
class hence we cannot change the naming. However, better to have a
more sensible name like getMessage to wrap this
5. There are too many constructors in the derived classes, I
would like only two constructors for each class
a. Copy constructor
b. Constructor with 2 parameters, exception code and
message, with message defaulting to null. ExceptionClass(int
code, char* msg = null)
Thanks,
Samisa…
[attachment "ExceptionModel_before.JPG" deleted by Mark Whitlock/UK/IBM]
Re: FW: Exception model (more thoughts)
Posted by Samisa Abeysinghe <sa...@gmail.com>.
Hi Dushshantha,
Have you looked into "coverting m_sMessage to a const char*
instead of a std::string" as Mark had suggested?
Thanks,
Samisa...
On 7/4/05, Mark Whitlock <ma...@uk.ibm.com> wrote:
>
>
>
>
> Hi Dushshantha,
> STL is being removed from the Axis C++ external API (AXISCPP-681 and
> others). If you are OK with this, please could you make m_sMessage a const
> char* instead of a std::string? I realise this involves more code but it
> helps to avoid incompatibilities in the STL.
> Thanks,
> Mark
> Mark Whitlock
> IBM
>
> ----- Forwarded by Mark Whitlock/UK/IBM on 04/07/2005 14:56 -----
>
> Mark
> Whitlock/UK/IBM
> To
> 04/07/2005 14:41 axis-c-dev@ws.apache.org
> cc
>
> Subject
> Re: FW: Exception model
>
>
>
>
>
>
>
>
>
> Hi Dushshantha,
> Try adding in
> ws-axis\c\tools\org\apache\axis\tools\cbindings\cbindinggenerator.conf the
> line
> excludemethod=AxisException::AxisException
>
> The problem is that the tool that generates the header files for the C
> bindings does not support overloaded constructors. So the proper fix is to
> change
> ws-axis\c\tools\org\apache\axis\tools\cbindings\CBindingGenerator.java
> generateFunctionPrototype to support overloaded constructors. There is
> support in there for overloading other methods, but this needs some fixing
> as well. I hope to work on this whole area in the autumn.
>
> The simple workaround is to add to
> ws-axis\c\tools\org\apache\axis\tools\cbindings\cbindinggenerator.conf the
> line excludemethod=AxisException::AxisException which should stop C
> bindings being generated for any AxisException constructor. If that doesn't
> work, exclude the AxisException file instead. This is probably a good fix
> since I can't see why C applications would need to construct
> AxisExceptions.
> Please get back to me if you still have problems,
> Mark
> Mark Whitlock
> IBM
>
> ----- Forwarded by Mark Whitlock/UK/IBM on 04/07/2005 13:38 -----
>
> "Dushshantha
> Chandradasa"
> <dchandradasa@vir To
> tusa.com> "Apache AXIS C Developers List"
> <ax...@ws.apache.org>
> 04/07/2005 11:11 cc
>
> Subject
> Please respond to FW: Exception model
> "Apache AXIS C
> Developers List"
>
>
>
>
>
>
>
>
> Hi All,
>
> I tried modifying the current exception model to the one that Samisa
> explained below. I introduced 2 constructors to AxisException base class;
> one is a copy constructor with following code
>
> AxisException(const AxisException& e):m_iExceptionCode(e.m_iExceptionCode),
> m_sMessage(e.m_sMessage){};
>
> And the other one is with following code
>
> AxisException(const int iExceptionCode, const char* pcMessage =
> NULL):m_iExceptionCode(iExceptionCode)
> {
> if(pcMessage)
> m_sMessage = std::string(pcMessage);
> else
> m_sMessage = "";
> }
>
> And changed the child inherited classes accordingly.
>
> But this change leads me to have C support break with following Error
> messages.
>
>
> [cc] AxisExceptionC.cpp
> [cc] C:\obj\include\axis/AxisException.h(180) : error C2733: second
> C lin
> kage of overloaded function 'axiscCreateAxisException' not allowed
> [cc] C:\obj\include\axis/AxisException.h(179) : see
> declaration o
> f 'axiscCreateAxisException'
> [cc] C:\obj\include\axis/AxisException.h(190) : error C2143: syntax
> error
> : missing ',' before '*'
> [cc] C:\obj\include\axis/AxisException.h(190) : error C2059: syntax
> error
> : '*'
> [cc] C:\obj\include\axis/AxisException.h(190) : error C2733: second
> C lin
> kage of overloaded function 'axiscCreateAxisException' not allowed
> [cc] C:\obj\include\axis/AxisException.h(190) : see
> declaration o
> f 'axiscCreateAxisException'
> [cc] Generating Code...
>
> BUILD FAILED
> C:\axiscpp\ws-axis\c\build.xml:213: The following error occurred while
> executing
> this line:
> C:\axiscpp\ws-axis\c\build\buildTools.xml:85: cl failed with return code 2
>
>
> Any thoughts please..
>
> Regards,
> Dushshantha
>
> From: Samisa Abeysinghe [mailto:SAbeysinghe@virtusa.com]
> Sent: Monday, July 04, 2005 11:22 AM
> To: Apache AXIS C Developers List
> Subject: Exception model
>
> Hi All,
> PFA the class diagram of current exception model we have.
>
> Looking into the several issues we have against the exception
> model, it is worth considering a re-arrangement here.
> http://issues.apache.org/jira/browse/AXISCPP-707
> http://issues.apache.org/jira/browse/AXISCPP-721
> http://issues.apache.org/jira/browse/AXISCPP-722
>
> The idea is *very* simple here. (basic OO stuff)
> 1. We have m_sMessage and m_iExceptionCode as data members
> in all the derived classes – move them to base class. Move the
> access methods to the base class as well.
> 2. Drop all processException() methods and move the logic to
> constructor
> 3. getMessage() methods in the derived classes do not get
> the message rather return the message corresponding to the
> exception code. Hence rename getMessage()
> getMessageForExceptionCode()
> 4. We have "what()" in the base class to get the error
> message. This is a virtual method inherited from the 'exception'
> class hence we cannot change the naming. However, better to have a
> more sensible name like getMessage to wrap this
> 5. There are too many constructors in the derived classes, I
> would like only two constructors for each class
> a. Copy constructor
> b. Constructor with 2 parameters, exception code and
> message, with message defaulting to null. ExceptionClass(int
> code, char* msg = null)
>
> Thanks,
> Samisa…
>
> [attachment "ExceptionModel_before.JPG" deleted by Mark Whitlock/UK/IBM]