发生exception时如何正常关闭端点?

我写了一个小的JAX-WS Web服务,我在一个容器外面运行Endpoint.publish() : Endpoint endpoint = Endpoint.create(new MyServiceImpl()); endpoint.publish(“http://localhost:4425/myService”); 如果我的任何Web服务方法抛出exception,则端点不会正常关闭,并且该地址将保持使用状态,直到Windows最终释放它。 这会导致经典错误: com.sun.xml.internal.ws.server.ServerRtException:服务器运行时错误:java.net.BindException:已在使用的地址:bind 我可以使用try / catch包装所有的Web服务方法,但这似乎有点重复。 我还尝试通过Thread.setDefaultUncaughtExceptionHandler()安装一个清理类,但是当我的Web服务方法引发exception时,没有触发此类。 有没有更优雅的解决方法,而不是诉诸无数的try / catch块? 根据Waldheinz的回答,我试图使用Jetty类来支持JDK默认值。 代码编译,但执行后,它会在publish后立即终止。 使用JDK类时,主线程将保持活动状态,直到我手动终止该进程。 有什么想法会有什么不妥? 我想知道是否有exception发生在某处,但被吞没,所以我看不到它。 Endpoint endpoint = Endpoint.create(new MyServiceImpl()); Server s = new Server(new InetSocketAddress(HOST, PORT)); ServerConnector connector = new ServerConnector(s); connector.setReuseAddress(true); s.setConnectors(new Connector[] { connector }); s.setHandler(new ContextHandlerCollection()); JettyHttpServer server = new JettyHttpServer(s, false); […]

带有ArrayList通配符的Java HashMap

我有一个HashMap,其值是ArrayLists,我正在尝试编写一个函数来接受这些HashMaps的generics实例 HashMap<String, ArrayList> myMap = new HashMap<String, ArrayList>(); public static void foo(HashMap<?, ArrayList> a) {} public static void bar(HashMap<?, ? extends ArrayList> a) {} // Compilation Failure! foo(myMap); // This works, but why do I need ? extends ArrayList bar(myMap) 错误消息是 类型为Example的方法foo(HashMap<?,ArrayList>)不适用于参数( HashMap<String,ArrayList> )。 为什么我需要为extends ArrayList使用通配符? 我认为通过使用ArrayList (没有? extends ),我可以将函数限制为仅具有ArrayList值的HashMaps。 我也知道以下通用方法有效: public static void printer(HashMap<K, […]

为什么File :: isDirectory作为FileFilter工作正常?

为什么File :: isDirectory在下面的例子中作为FileFilter正常工作? File[] files = new File(“.”).listFiles(File::isDirectory); listFiles方法需要FileFilter作为参数 public File[] listFiles(FileFilter filter) { … } FileFilter是一个function接口,它有一个方法接受 File参数 boolean accept(File pathname); 而且File类中的isDirectory方法没有参数 public boolean isDirectory() { … }

tomcat中受密码保护的应用程序

我正在使用(JSP + Servlet)开发Web应用程序,并且我使用Tomcat 7.0.33作为web container 。 所以我的要求是tomcat中的每个应用程序都将受password保护,就像tomcat中的manager application受到保护一样。 到目前为止,我做了以下事情: server.xml中 的tomcat-users.xml中 web.xml中 role1 tomcat webappname /* role1 tomcat BASIC webappname 当任何人通过应用程序路径打开应用程序时它工作正常(它要求输入用户名和密码,并且应用程序接受role1或tomcat进行身份validation)。 但问题是假设我以具有所有角色的用户tomcat身份登录,并且当显示管理器屏幕列出了服务器上部署的所有应用程序时,如果我尝试打开mywebapplication那么它再次询问用户名和密码。 我的问题是,如果我已将所有roles分配给用户tomcat那么如果我以tomcat身份登录,为什么要求输入密码? 有什么方法可以避免这种情况吗? 提前致谢。

Guava Joiner无法使用前缀和后缀

我在Joiner中要求能够使用前缀和后缀元素。 例如 String str[] = {“a”, “b”, “c”}; Joiner.on(“,”).prefix(“‘”).suffix(“‘”).join(str); 预期产出将是: ‘a’,’b’,’c’ 我们有替代方案吗? 因为番石榴不这样做(或者我不知道)。 有了java 8还有更好的选择吗?

@WithUserDetails和spring boot 1.4 TestEntityManager问题

我有Spring Boot的TestEntityManager和@WithUserDetails注释的问题。 这是我的测试套件: public class AdvertisementAuthorizationTest extends AbstractIntegrationTest { private static final String IMPERSONATOR_EMAIL = “joe.hacker@gmail.com”; private final static String OWNER_OF_ADVERTISEMENT_EMAIL = “john.nice@gmail.com”; @Autowired private TestEntityManager testEntityManager; @Autowired private MockMvc mockMvc; private Advertisement advertisement; private UserAccount impersonator; private ObjectMapper mapper = new ObjectMapper(); @Before public void setUp() { advertisement = testEntityManager.persist(createAdvertisement(OWNER_OF_ADVERTISEMENT_EMAIL)); impersonator = testEntityManager.persist(createUserAccount(IMPERSONATOR_EMAIL)); } […]

将java bean属性传递给JSTL

我是Java和JSTL的新手,很抱歉,如果这是一个非常简单的问题。 我试图举一个例子,我在网上找到并开始工作,但我似乎遇到了问题。 所有这一切都是你想要创建一个java bean并从java bean访问属性。 但是我在JSTL jsp中调用类的行上得到一个空指针exception :useBean id =“students”class =“com.beans.Students” 。 这是java类: package com.beans; public class Students implements java.io.Serializable { private String firstName = null; private int age = 0; public Students() { } public String getFirstName(){ return firstName; } public int getAge(){ return age; } public void setFirstName(String firstName){ this.firstName = firstName; } […]

如何配置Eclipse以默认创建受保护的java方法而不是私有?

当我使用Eclipse 3.5为我自动创建方法时(例如,通过调用尚不存在的方法,然后使用Quickfix创建方法),Eclipse使用私有范围创建方法。 我想改变它,以便默认情况下使用受保护的范围创建它。 我怎么能这样做?

jackson:从json中删除一些值并保留一些空值

我有这样的模型: public class Employee { @JsonProperty(“emplyee_id”) private Integer id; @JsonProperty(“emplyee_first_name”) private String firstName; @JsonProperty(“emplyee_last_name”) private String lastName; @JsonProperty(“emplyee_address”) private String address; @JsonProperty(“emplyee_age”) private Byte age; @JsonProperty(“emplyee_level”) private Byte level; //getters and setters } 现在我需要使用此(仅)模型创建两个JSON。 第一个必须这样,例如: { “employee_id”:101, “employee_first_name”:”Alex”, “employee_last_name”:”Light”, “employee_age”:null, “employee_address”:null } 第二个必须像这样: { “employee_id”:101, “employee_level”:5 } 顺便说一句,我已经测试了@JsonIgnore和@JsonInclude(JsonInclude.Include.NON_NULL) 。 第一个(我知道的)问题是,那些字段不能包含在其他JSON中(例如,如果level获取此注释,它将不包含在第二个JSON中) 而第二个的问题是, null值不能包含在JSON中。 那么我可以保留空值并阻止一些其他属性包含在JSON中而无需创建额外的模型吗? 如果答案是肯定的,我该怎么办呢? 如果不是我真的很感激,如果有人给我这个状态的最佳解决方案。 […]

Java Tuple2使用accessor方法和直接调用变量之间的区别

我在我的Java代码中使用Tuple2,我想知道通过getter访问值或直接获取变量之间是否存在差异。 Tuple2 tuple = new Tuple2(“Hello”, “World”); //getting values directly String direct = tuple._1; //using getter String indirect = tuple._1();