我正在尝试使用招摇来记录我的休息api,并且我已经取得了一些成功,但是当涉及到约束资源参数时,我正在碰壁.我正在使用JBoss RESTEasy与hibernate验证器提供程序和Jackson 2.x注释POJO.我遇到的问题是遇到@ DecimalMin/@ DecimalMax注释时我得到了一个
java.lang.NoSuchMethodError: javax.validation.constraints.DecimalMin.inclusive()Z
Run Code Online (Sandbox Code Playgroud)
似乎swagger正在尝试使用更新版本的javax.validation.constraints.*(v1.1.0.Final)库,而jboss正在使用旧版本(v1.0.0.GA).我已经尝试了所有我能想到的东西,包括适当的库无济于事.
环境是JBoss EAP 6.4.0.GA
我的招摇条目(pom.xml):
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jaxrs</artifactId>
<version>1.5.8</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
示例POJO代码段:
...
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
...
@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
"altM",
"altDatum"
})
public class Altitude {
@JsonProperty("altM")
@DecimalMin("-2000")
@DecimalMax("10000")
@NotNull
private Double altM;
...
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多东西,但是我学到的东西越多,我相信以下是我理解依赖关系的两个最相关的尝试:
尝试1:从hibernate验证器中排除javax.validation并让swagger包含它:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-hibernatevalidator-provider</artifactId>
<version>3.0.16.Final</version>
<exclusions>
<exclusion>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
尝试2:显式包含javax.validation v1.1.0.Final:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Maven依赖树(尝试1):
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ MissionPlanningService ---
[INFO] mil.army.cerdec.cpi.mcas:MissionPlanningService:war:0.0.2-SNAPSHOT
[INFO] +- org.jboss.resteasy:resteasy-jaxrs:jar:3.0.16.Final:compile
[INFO] | +- org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.0_spec:jar:1.0.0.Final:compile
[INFO] …
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,其中包含一个支持DefaultTreeModel的JTree,它用于显示反映我服务器上文件系统一部分的文件层次结构(我将其称为我的客户端应用程序).我还有一个服务器应用程序,它提供我的客户端应用程序需要显示的数据(我将这称为我的服务器应用程序).我正在使用"懒惰加载子"方法,以便我只需要将文件加载到我的树中,如果用户对它们感兴趣的话.延迟加载方法:
treeWillExpand(TreeExpansionEvent evt)
DefaultTreeModel.insertNodeInto()
用于每个返回的数据文件.DefaultTreeModel.nodeStructureChanged()
.以上工作正常,懒惰加载孩子我没有任何问题.我的问题出现在新数据上传到服务器并且我想更新树不仅包括新数据,而且还要将扩展状态和选定节点设置为更新树之前的状态(以便用户因为有新的数据需要查看,所以不会在树上蠢蠢欲动.流程如下:
JTree.getExpandedDescendants()
JTree.getSelectionPath()
JTree.getExpandedDescendants()
调用枚举中的JTree.expandPath()
每个TreePath 返回的树路径枚举.我的问题是,无论我尝试什么,树的GUI都不会更新以反映扩展状态.我知道我对expandPath的调用正在发挥作用,因为我可以看到客户端发送的数据请求以及每次调用expandPath时服务器数据的响应.我还在另一个窗口中显示有关当前所选节点的信息,并显示正确选择的节点.但是,令我失望的是,GUI只显示根节点(已展开)和它的子节点(未展开)而不是之前的展开状态.
所以我的问题是:如何恢复JTree的扩展状态,以便在数据模型更新之前和之后GUI保持不变?
这些是我尝试过的一些事情:
equals()
,hashCode()
但这对我没有用.setExpandsSelectedPaths(true)
,nodeStructureChanged()
,JTree.invalidate()
这是我的SSCCE:
package tree.sscce;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.JButton;
import java.util.Enumeration;
import javax.swing.BoxLayout;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeWillExpandListener;
import …
Run Code Online (Sandbox Code Playgroud)