Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 如何检测JAXB生成的XML元素是可选的还是必需的_Java_Jaxb - Fatal编程技术网

Java 如何检测JAXB生成的XML元素是可选的还是必需的

Java 如何检测JAXB生成的XML元素是可选的还是必需的,java,jaxb,Java,Jaxb,我正在使用一些JAXB生成的类 有没有办法通过代码确定元素是可选的还是必需的? 根据输入值,我有一些元素可能需要,也可能不需要。 例如:一些非常快速、笨拙的大纲代码,让您了解我的意思: XMLElement xmlElement = ....; InputValue inputValue = ....; if(xmlElement.isRequired && inputValue.isNull()) { //keep empty xmlElement }

我正在使用一些JAXB生成的类

有没有办法通过代码确定元素是可选的还是必需的? 根据输入值,我有一些元素可能需要,也可能不需要。 例如:一些非常快速、笨拙的大纲代码,让您了解我的意思:

XMLElement xmlElement = ....;
InputValue inputValue = ....;

 if(xmlElement.isRequired && inputValue.isNull()) {
         //keep empty xmlElement
 } else if(xmlElement.isRequired && ! inputValue.isNull()) {
     xmlElement.setInputValueAttribute(inputValue.toString());
 } else if(!xmlElement.isRequired && inputValue.isNull()) {
     // don't use the empty xmlElement
 } else if(!xmlElement.isRequired && ! inputValue.isNull()) {
     xmlElement.setInputValueAttribute(inputValue.toString());
 }
也许我看错了?

好吧,看来我们不能(或者至少我不能弄明白!JAXB专家请随意回答:))

我实际上意识到,因为我已经知道哪些元素是必需的,哪些不是(由XSD手动),我基本上只是在代码中添加了一个Helper方法,用于生成XML类代码。创建可选标记时会调用此帮助程序,它只检查null/empty inputValue,并适当地添加元素/属性

例如

createXMLElement(值、类型、元素列表);
私有void createXMLElement(InputValue值、XMLElementType类型、元素列表){
XMLElement结果=null;
if(null!=value&!value.isEmpty()){
结果=新的XMLElement();
//填充ATT等
元素列表。添加(结果);
}
}
这个问题是手动干扰,我更愿意让它自动化。嗯,我想第一个版本很好。:)
此外,它仅限于单个元素类型(本例中为XMLElement)

模式决定是否需要它。如果您认为需要的字段不存在,您可以在代码中插入某些内容以产生适当的错误,但是通过代码来确定它是否是必需的,我不确定。谢谢。是的,xsd正在根据需要生成java类。问题就在我需要使用它们的时候。我有不同的场景:有时“inputValue”是空的,但标记是必需的,因此我应该实例化该元素类以生成“无内容”的XML。在另一个场景中,inputValue是空的,标记是可选的,因此我不应该实例化类来生成XML。
createXMLElement(value, type, listOfElements);

private void createXMLElement(InputValue value, XMLElementType type, List<XMLElement> listOfElements) {

 XMLElement result = null;
 if (null != value && !value.isEmpty()) {
    result = new XMLElement();
    // populate the atts etc

    listOfElements.add(result);

 }

}