通过XSD def将逻辑代码插入到生成的JAXB java文件中

问题是,出于某种原因。 xsd没有/不能定义除基本属性和setter和getter之外的所有逻辑变量,所以我们试图通过xsd定义“注入代码”,这些代码实际上已被其他人多次讨论过。 使用’简单java方法’进行’简单注入’没有问题,它不需要在类def之上使用任何’import’语句。

但不知怎的,如果我们想要使用它。 在我看来,我们无法接受或导入除了setter或getter之外的任何包。 ,详见下文

  1. xsd定义test.xsd

           <![CDATA[ private String str; public String returnStr() { Locations locationCls =this.getLocations(); List locationids = new ArrayList(); // get a list of locationid into locationids (list) List locationList = locationCls.getLocation(); for (Location loc : locationList) { locationids.add(String.valueOf(loc.getId())); } // return string like loc1,loc2,loc3 return StringUtils.join(locationids, ','); } ]]>                          
  2. 运行jaxb ri命令:xjc.bat test.xsd -Xinject-code -extension

  3. 在Client.java中成功查看下面的代码片段

      private String str; public String returnStr() { Locations locationCls =this.getLocations(); List locationids = new ArrayList(); // get a list of locationid into locationids (list) List locationList = locationCls.getLocation(); for (Location loc : locationList) { locationids.add(String.valueOf(loc.getId())); } // return string like loc1,loc2,loc3 return StringUtils.join(locationids, ','); } 

因此,我们知道jdk会抱怨编译错误,因为Apache commons中的StringUtils(或其他第3部分的util工具,如google集合,以帮助其他方案)不会导入生成的文件中。 了解有一些谷歌项目使用jaxb插件插入或调用生成的java文件的方法。 只是想花一天左右的时间来看看我们是否可以通过xsd本身来制作它而不需要任何插件。 任何想法将不胜感激。

您可以在要注入的代码中指定完全分类的类名,例如:

 return org.apache.commons.lang.StringUtils.join(locationids, ',');