Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 十进制值为0E-8_Java_Xml_Validation_Xsd_Weblogic12c - Fatal编程技术网

Java 十进制值为0E-8

Java 十进制值为0E-8,java,xml,validation,xsd,weblogic12c,Java,Xml,Validation,Xsd,Weblogic12c,我们正在用Java1.8和WebLogic12c中的XSD验证XML,但我们面临的问题是0E-8不是十进制的有效值 下面是我的XML: <?xml version="1.0" encoding="UTF-8"?> <isns:Envelope xmlns:isns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pkp-core=&qu

我们正在用Java1.8和WebLogic12c中的XSD验证XML,但我们面临的问题是0E-8不是十进制的有效值

下面是我的XML:

<?xml version="1.0" encoding="UTF-8"?>

<isns:Envelope xmlns:isns="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:pkp-core="http://tracx.de/pkp/interfaces/core/1.0"
               xmlns:pkp-msg="http://tracx.de/pkp/interfaces/msg/1.0">
   <isns:Header/>
   <isns:Body>
      <pkp-msg:ABC>
         <pkp-msg:test>
            <pkp-core:oops>
               <pkp-core:XYZ>0.00000000</pkp-core:XYZ>
               
             <pkp-core:billi>period</pkp-core:bill>
               <pkp-core:check>0.90225</pkp-core:check>
            </pkp-core:oops>
         </pkp-msg:test>
      </pkp-msg:ABC>
   </isns:Body>
</isns:Envelope>

无法复制
这不是一个答案,而是这样写的,所以它可以包含一个

以下代码已在上进行了测试:

  • OpenJDK jdk1.7.0_75
  • Oracle jdk1.8.0_181
  • OpenJDK jdk-11.0.2
  • OpenJDK jdk-14
这段代码在所有4个节点上产生相同的输出

导入java.io.StringReader;
导入javax.xml.xmlstants;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamSource;
导入javax.xml.validation.Schema;
导入javax.xml.validation.SchemaFactory;
导入javax.xml.validation.Validator;
导入org.w3c.dom.Document;
导入org.xml.sax.InputSource;
公开课考试{
公共静态void main(字符串[]args)引发异常{
字符串xml=“\n”+
“0.00000000\n”+
"";
DocumentBuilderFactory domFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder domBuilder=domFactory.newDocumentBuilder();
documentdocument=domguilder.parse(新的InputSource(新的StringReader(xml));
System.out.println(“XYZ=“+document.getElementsByTagName(“XYZ”).item(0.getTextContent());
字符串xsd=“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
"";
SchemaFactory SchemaFactory=SchemaFactory.newInstance(xmlstants.W3C\u XML\u SCHEMA\u NS\u URI);
Schema Schema=schemaFactory.newSchema(新的StreamSource(新的StringReader(xsd));
Validator Validator=schema.newValidator();
validator.validate(新的DOMSource(文档));
System.out.println(“验证成功”);
}
}
输出

XYZ=0.00000000
验证成功

0.00000000
BigDecimal
进行解析时,它是一个数字
0
,其刻度应该是8,但
BigDecimal
的方法将其输出为
0E-8
,这是有充分证明的。您没有指定拒绝该值的原因;是因为中的零值无效,还是因为不允许使用该值?实际的XML模式指定了什么?hi@Andreas。在XSD中,我们进行了验证,比如不解释XSD,在问题中显示它。仅相关部分就足够了。仅供参考:值
0.00000000
是有效的
xsd:decimal
值,因此要么您没有您认为拥有的值,要么xsd验证器有错误。我们在java 1.6中使用上述验证方法,它工作正常,java 1.8的问题。因此,您可以建议的任何替代方法,请非常感谢,并清除我所有的doudts@Andreas
javax.xml.validation.Validator validator = schema.newValidator();

                validator.setErrorHandler(new EUBatchValidationHandler());

                validator.validate(source);