【发布时间】:2016-02-01 23:09:11
【问题描述】:
如何在 java 中为 web 服务请求编写条件,在我的 web 服务请求中,我传递了一个具有 SpeedInfo 的元素。在SpeedInfo 元素中有两个子元素Bandwidth 和AccessSpeed。
这是我在 SoapUI 中的请求:
<sch:SpeedInfo>
<ns:Bandwidth xmlns:ns="http://lpp.att.com/logical/classofservice/schema/v1">4000000</ns:Bandwidth>
<ns:AccessSpeed xmlns:ns="http://lpp.att.com/logical/classofservice/schema/v1">4000000</ns:AccessSpeed>
</sch:SpeedInfo>
我的 Java 条件:
if (request.getSpeedInfo() == null || (request.getSpeedInfo() == null && request.getSpeedInfo().getBandwidth() == null)){
throw new Exception(" SpeedInfo Bandwidth must be passed in the request ");
}
我需要我的条件来检查 3 个场景:
1. if <speedInfo> itself is not present
2. <sch:SpeedInfo> is present, but bandwidth not present:
<sch:SpeedInfo>
<ns:AccessSpeed xmlns:ns="http://lpp.att.com/logical/classofservice/schema/v1">40000000</ns:AccessSpeed>
</sch:SpeedInfo>
3. Bandwidth is present but no value
<sch:SpeedInfo>
<ns:Bandwidth xmlns:ns="http://lpp.att.com/logical/classofservice/schema/v1"></ns:Bandwidth>
<ns:AccessSpeed xmlns:ns="http://lpp.att.com/logical/classofservice/schema/v1">40000000</ns:AccessSpeed>
</sch:SpeedInfo>
我得到的错误:
2016-02-02 09:45:48,349 WARN http-bio-8080-exec-3--[c0a8381152a2a943f51] c0a8381152a2a943f51 fw.ws.MessageInInterceptor:49 - Content input stream is NOT null, nothing to log in handleFault()?
2016-02-02 09:45:48,351 WARN http-bio-8080-exec-3--[c0a8381152a2a943f51] c0a8381152a2a943f51 cxf.phase.PhaseInterceptorChain:452 - Interceptor for {http://lpp.att.com/logical/v1}LogicalService#{http://lpp.att.com/logical/v1}classOfServiceAllocation has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Unmarshalling Error: cvc-datatype-valid.1.2.1: '' is not a valid value for 'integer'.
at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:908)
at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:712)
【问题讨论】:
-
request.getSpeedInfo() == null && request.getSpeedInfo().getBandwidth() == null没有多大意义。这就像问if (foo == null && foo.bar() == null)。现在如果foo为空,那么您的第二个条件将被执行,这意味着foo.bar()将类似于null.bar(),但由于null没有任何成员,您将获得NPE。
标签: java