[ https://issues.apache.org/jira/browse/CXF-8324?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17174242#comment-17174242 ]
Robin Schimpf commented on CXF-8324: ------------------------------------ Yes, I'll send a pull request > ClassCastException at AttachmentUtil.setStreamedAttachmentProperties > -------------------------------------------------------------------- > > Key: CXF-8324 > URL: https://issues.apache.org/jira/browse/CXF-8324 > Project: CXF > Issue Type: Bug > Affects Versions: 3.3.2 > Environment: CXF used within Wildfly 17 > Java 11 > Reporter: Robin Schimpf > Priority: Major > > I am currently creating a Webservice Client and have set the > {{AttachmentDeserializer.ATTACHMENT_MEMORY_THRESHOLD}} property as an > integer. When sending a request the following exception occured. > {code:java} > Caused by: java.lang.ClassCastException: class java.lang.Integer cannot be > cast to class java.lang.String (java.lang.Integer and java.lang.String are in > module java.base of loader 'bootstrap') > at > org.apache.cxf@3.3.2//org.apache.cxf.attachment.AttachmentUtil.setStreamedAttachmentProperties(AttachmentUtil.java:178) > at > org.apache.cxf@3.3.2//org.apache.cxf.attachment.AttachmentDeserializer.cache(AttachmentDeserializer.java:242) > at > org.apache.cxf@3.3.2//org.apache.cxf.attachment.AttachmentDeserializer.cacheStreamedAttachments(AttachmentDeserializer.java:216) > at > org.apache.cxf@3.3.2//org.apache.cxf.attachment.AttachmentDeserializer.hasNext(AttachmentDeserializer.java:329) > at > org.apache.cxf@3.3.2//org.apache.cxf.attachment.LazyAttachmentCollection.hasNext(LazyAttachmentCollection.java:77) > at > org.apache.cxf@3.3.2//org.apache.cxf.attachment.AttachmentDeserializer.markClosed(AttachmentDeserializer.java:313) > at > org.apache.cxf@3.3.2//org.apache.cxf.attachment.DelegatingInputStream.close(DelegatingInputStream.java:52) > at > org.apache.cxf@3.3.2//org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:60) > at > org.apache.cxf.impl//org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:671) > at > org.apache.cxf@3.3.2//org.apache.cxf.endpoint.AbstractConduitSelector.complete(AbstractConduitSelector.java:208) > at > org.apache.cxf@3.3.2//org.apache.cxf.endpoint.ClientImpl.completeExchange(ClientImpl.java:553) > at > org.apache.cxf@3.3.2//org.apache.cxf.endpoint.ClientImpl.processResult(ClientImpl.java:605) > at > org.apache.cxf@3.3.2//org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:540) > at > org.apache.cxf@3.3.2//org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:440) > at > org.apache.cxf@3.3.2//org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:355) > at > org.apache.cxf@3.3.2//org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313) > at > org.apache.cxf.impl//org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) > at > org.apache.cxf.impl//org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:140) > ... 77 more > {code} > Only after receiving this exception I realized (through reading the > implementation) the only two allowed values for the property are Long and > String. > For me the current implementation is too optimistic and pesimistic at the > same time. The check if the given value is a Long is too optimistic because > the user could also provide an integer or even a short if the value he wants > to set is small. And the assumtion that any non Long value is a String is > overly optimistic and in the end leads to the shown Exception. > I would propose to change the implementation to something like this (if there > is no hard requirement that the user has to provide an Long or String) > {code:java} > if (threshold instanceof Number) { > bos.setThreshold(((Number)threshold).longValue()); > } else if (threshold instanceof String) { > bos.setThreshold(Long.parseLong((String)threshold)); > } else { > // throw some descriptive exception > } > {code} > The same change can also be used for the other 2 properties set in this > method. > Providing some information in the JavaDoc of the mentioned property about > allowed values would also be helpful. -- This message was sent by Atlassian Jira (v8.3.4#803005)