[ https://issues.apache.org/jira/browse/AXIS2-5072?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13051076#comment-13051076 ]
Jason Tholstrup commented on AXIS2-5072: ---------------------------------------- I'd ask that you reconsider opening this issue as I believe you are misinterpreting the JavaBeans specification. The javabeans specification allows for properties to have only a read method or only a write method. In my case, I have a getter and setter pair that require an additional parameter (this was not in the sample as I went for simplicity). It is my expectation that since this does not constitute a property (it does not meet javaBeans specs) that it would be ignored. In the axis2-1.3 code this was the case. Other Apache projects follow this interpretation as well. For example, BeanUtils (in commons-BeanUtils) would simply skip this property if you were to copy one instance of Event to another instance. Beans are allowed to expose methods which are not properties and read-only and write-only are perfectly acceptable. From the javaBeans specification (http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html) Section 2.2 The three most important features of a Java Bean are the set of properties it exposes, the set of methods it allows other components to call, and the set of events it fires. Section 8.3.1 By default, we use design patterns to locate properties by looking for methods of the form: public <PropertyType> get<PropertyName>(); public void set<PropertyName>(<PropertyType> a); If we discover a matching pair of “get<PropertyName>” and “set<PropertyName>” methods that take and return the same type, then we regard these methods as defining a read-write property whose name will be “<propertyName>”. We will use the “get<PropertyName>” method to get the property value and the “set<PropertyName>” method to set the property value. The pair of methods may be located either in the same class or one may be in a base class and the other may be in a derived class. If we find only one of these methods, then we regard it as defining either a read-only or a write- only property called “<propertyName>” By default we assume that properties are neither bound nor constrained (see Section 7). So a simple read-write property “foo” might be represented by a pair of methods: public Wombat getFoo(); public void setFoo(Wombat w); Thanks, Jason > BeanUtil bombs on missing setter > -------------------------------- > > Key: AXIS2-5072 > URL: https://issues.apache.org/jira/browse/AXIS2-5072 > Project: Axis2 > Issue Type: Bug > Components: adb > Affects Versions: 1.6.0 > Environment: OSX > Reporter: Jason Tholstrup > Assignee: Sagara Gunathunga > Labels: adb, beanutil > Fix For: 1.7.0 > > > First off, thanks for all your work on axis. > I am currently upgrading from Axis2 1.3 to version 1.6 and I've run into an > issue. BeanUtil bombs out on a missing setter property that is not in my > WSDL when building response objects on my server side code (see stack trace > below). This "modifiedAttribute" property has a signature of > isModifiedAttribute(int index) and is not included in any wsdl yet this > section still throws an error. Is there a reason elsewhere in the code where > it makes sense to throw an exception if a property does not have a getter and > a setter? To me the appropriate decision would seem to be to ignore anything > that did not have both. This seems to be the decision that my 1.3 version of > the code went with since I wasn't seeing this issue before. Any thoughts > would be appreciated. > Thanks, > Jason Tholstrup > 14:24:32.129 ERROR [http-8080-8] > o.a.a.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic line:210 - > org.apache.axis2.AxisFault: Property 'modifiedAttribute' in bean class > 'com.nicusa.db.tables.Item'is not readable. > java.lang.RuntimeException: org.apache.axis2.AxisFault: Property > 'modifiedAttribute' in bean class 'com.nicusa.db.tables.Item'is not readable. > at > org.apache.axis2.databinding.utils.BeanUtil.getPropertyQnameList(BeanUtil.java:276) > ~[axis2-adb-1.6.0.jar:1.6.0] > at > org.apache.axis2.databinding.utils.BeanUtil.getPropertyQnameList(BeanUtil.java:129) > ~[axis2-adb-1.6.0.jar:1.6.0] > at > org.apache.axis2.databinding.utils.BeanUtil.getPullParser(BeanUtil.java:72) > ~[axis2-adb-1.6.0.jar:1.6.0] > at > org.apache.axis2.databinding.utils.reader.ADBXMLStreamReaderImpl.processProperties(ADBXMLStreamReaderImpl.java:994) > ~[axis2-adb-1.6.0.jar:1.6.0] > at > org.apache.axis2.databinding.utils.reader.ADBXMLStreamReaderImpl.next(ADBXMLStreamReaderImpl.java:850) > ~[axis2-adb-1.6.0.jar:1.6.0] > at org.apache.axis2.util.StreamWrapper.next(StreamWrapper.java:71) > ~[axis2-kernel-1.6.0.jar:1.6.0] > at > org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681) > ~[axiom-api-1.2.11.jar:1.2.11] > at > org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214) > ~[axiom-api-1.2.11.jar:1.2.11] > at > org.apache.axiom.om.impl.llom.OMSerializableImpl.build(OMSerializableImpl.java:78) > ~[axiom-impl-1.2.11.jar:1.2.11] > at > org.apache.axiom.om.impl.llom.OMElementImpl.build(OMElementImpl.java:722) > ~[axiom-impl-1.2.11.jar:1.2.11] > at > org.apache.axiom.om.impl.llom.OMElementImpl.detach(OMElementImpl.java:700) > ~[axiom-impl-1.2.11.jar:1.2.11] > at > org.apache.axiom.om.impl.llom.OMNodeImpl.setParent(OMNodeImpl.java:105) > ~[axiom-impl-1.2.11.jar:1.2.11] > at > org.apache.axiom.om.impl.llom.OMElementImpl.addChild(OMElementImpl.java:296) > ~[axiom-impl-1.2.11.jar:1.2.11] > at > org.apache.axiom.om.impl.llom.OMElementImpl.addChild(OMElementImpl.java:212) > ~[axiom-impl-1.2.11.jar:1.2.11] > at > org.apache.axis2.rpc.receivers.RPCUtil.processResponse(RPCUtil.java:105) > ~[axis2-adb-1.6.0.jar:1.6.0] > at > org.apache.axis2.rpc.receivers.RPCUtil.processResponseAsDocLitWrapped(RPCUtil.java:456) > ~[axis2-adb-1.6.0.jar:1.6.0] > at > org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:153) > ~[axis2-adb-1.6.0.jar:1.6.0] > at > org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) > [axis2-kernel-1.6.0.jar:1.6.0] > at > org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110) > [axis2-kernel-1.6.0.jar:1.6.0] > at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181) > [axis2-kernel-1.6.0.jar:1.6.0] > at > org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172) > [axis2-transport-http-1.6.0.jar:na] > at > org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146) > [axis2-transport-http-1.6.0.jar:na] > at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) > [servlet-api.jar:na] > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > [servlet-api.jar:na] > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) > [catalina.jar:6.0.29] > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > [catalina.jar:6.0.29] > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) > [catalina.jar:6.0.29] > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) > [catalina.jar:6.0.29] > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) > [catalina.jar:6.0.29] > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) > [catalina.jar:6.0.29] > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) > [catalina.jar:6.0.29] > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) > [catalina.jar:6.0.29] > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) > [tomcat-coyote.jar:6.0.29] > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) > [tomcat-coyote.jar:6.0.29] > at > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) > [tomcat-coyote.jar:6.0.29] > at java.lang.Thread.run(Thread.java:680) [na:1.6.0_24] > Caused by: org.apache.axis2.AxisFault: Property 'modifiedAttribute' in bean > class 'com.nicusa.db.tables.Item'is not readable. > at > org.apache.axis2.databinding.utils.BeanUtil.getPropertyQnameList(BeanUtil.java:189) > ~[axis2-adb-1.6.0.jar:1.6.0] > ... 35 common frames omitted -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org For additional commands, e-mail: java-dev-h...@axis.apache.org