好像我过去曾经做过一次这样的事情,但是我找不到任何关于我做了什么才能让它发挥作用的参考.
我有一个Web应用程序,我想在其中指定一个不同于我的web服务器/ jre提供的JAXB实现.我从maven下载了相应的工件,看到jar在我的战争中正确打包,但是,当我启动我的Web应用程序时,我发现它仍在使用捆绑的JRE实现.
我依旧记得有关我可以配置的属性文件的一些内容,但是找不到它需要如何配置的引用.此外,如果我想要使用的实现是相同的(只是一个较新的版本),类名将与在JRE中打包相同.如何指定我想使用WAR中捆绑的那些?
编辑
我目前正在运行JBoss 7.0.2,使用Oracle JDK 1.6_0_27,JRE附带的JAXB RI(我认为它是v2.1).我正在尝试升级到JAXB RI 2.2.5(在MvnRepository上找到).
我今天早上做了一点挖掘,发现我的日志中有一条奇怪的错误消息:
09:43:18,325 WARN [org.jboss.as.server.deployment] (MSC service thread 1-12) Class Path entry jaxb-api.jar in "/C:/servers/jboss-as-7.0.2.Final/standalone/deployments/LendingSimulationServiceEAR.ear/LendingSimulationService.war/WEB-INF/lib/jaxb-impl-2.2.5.jar" does not point to a valid jar for a Class-Path reference.
09:43:18,325 WARN [org.jboss.as.server.deployment] (MSC service thread 1-12) Class Path entry activation.jar in "/C:/servers/jboss-as-7.0.2.Final/standalone/deployments/LendingSimulationServiceEAR.ear/LendingSimulationService.war/WEB-INF/lib/jaxb-impl-2.2.5.jar" does not point to a valid jar for a Class-Path reference.
09:43:18,326 WARN [org.jboss.as.server.deployment] (MSC service thread 1-12) Class Path entry jsr173_1.0_api.jar in "/C:/servers/jboss-as-7.0.2.Final/standalone/deployments/LendingSimulationServiceEAR.ear/LendingSimulationService.war/WEB-INF/lib/jaxb-impl-2.2.5.jar" does not point to a valid …Run Code Online (Sandbox Code Playgroud) 鉴于时区问题的数量,我本以为能够找到这个问题的答案,但没有取得任何成功.
有没有办法moment.js解析ISO-8601字符串但是在我当地的timzeone中进行了解析?基本上我想忽略ISO字符串中提供的时区信息.
例如,如果我在EDT时区:
var x = moment( "2012-12-31T00:00:00+0000" );
Run Code Online (Sandbox Code Playgroud)
会给我:"2012-12-30T19:00:00-5000"
我想忽略时区信息,只是让它给我一个相当于"2012-12-31T00:00:00-5000"当地时间(EDT)的时刻.
我遇到了JAXB unmarshalling的问题.我想我已正确编码,但我的unmarshalled对象返回null参数.因此,我假设在解组时,JAXB没有看到它期望的适当的XML结构.但是,我没有收到任何错误消息或抛出任何异常.
无论如何都要逐步完成解组过程,看看它确实在哪里/为什么没有填充我的对象?
实际的解组代码相当普通:
public <T> T unmarshall(Node node, Class<T> clazz) throws JAXBException {
// Creating an unmarshaller
Unmarshaller u = JAXBContext.newInstance(clazz).createUnmarshaller();
// unmarshal an instance node into Java content
return clazz.cast(u.unmarshal(node, clazz).getValue());
}
Run Code Online (Sandbox Code Playgroud)
但是,当我调用它时,我得到一个返回类型clazz的对象(如预期的那样),但是没有填充.
我试图解组的DOM对象是由第三方API生成的.我已经遇到了一些非常奇怪的解组行为,这就是为什么我希望能够调试这个过程.例如,如果我尝试解组DOM对象中的子元素(即:doc.getByElementName("myElement").item(0)),它将以静默方式失败.但是,如果我将文档转换为字符串,并将其重新导入到新文档中,那么它可以很好地转换它.
我不知道如何调试此问题,我开始感到非常沮丧.
感谢您的任何见解!
埃里克
我使用SLF4j作为我的日志框架,由log4j支持.我的问题是我正在寻找一种方法来在运行时更改记录器的日志记录级别.
我知道slf4j不允许直接通过自己的API,因此,我必须直接访问日志记录提供程序.就个人而言,我发现这是slf4j的一个巨大缺陷.所以现在我的问题是如何通过slf4j以编程方式确定我正在使用哪个提供程序?使用slf4j的最大目的是让您成为提供者不可知的 - 您可以轻松地在您喜欢的日志记录系统之间切换,而无需重新编码.但是现在,如果我必须直接调用log4j,我就失去了这种能力.
至少,我希望能够确定我是否使用log4j作为提供程序,如果是,则允许用户切换日志级别.
如果我这样做 LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME),结果是一个实例org.slf4j.impl.Log4jLoggerAdapter而不是偶数org.apache.log4j.Logger(正如我希望/期望的那样).
有没有办法找到这个?
谢谢,埃里克
我正在使用Spring 3.2.4,并且access-denied-handler在使用基于Annotation的方法级安全性时无法让Spring Security重定向到我.我发现了几个不同的帖子,但到目前为止,我找不到任何解决方案.
我的security.xml文件:
<!-- need this here to be able to secure methods in components other than controllers (as scanned in applicationContext.xml) -->
<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" jsr250-annotations="enabled" ></global-method-security>
<!-- Annotation/JavaConfig examples http://stackoverflow.com/questions/7361513/spring-security-login-page -->
<http use-expressions="true" entry-point-ref="authenticationEntryPoint">
<access-denied-handler ref="accessDeniedHandler"/>
<intercept-url pattern="/secure/login" access="permitAll" />
<intercept-url pattern="/secure/logout" access="permitAll" />
<intercept-url pattern="/secure/denied" access="permitAll" />
<session-management session-fixation-protection="migrateSession" session-authentication-error-url="/login.jsp?authFailed=true">
<concurrency-control max-sessions="10" error-if-maximum-exceeded="true" expired-url="/login.html" session-registry-alias="sessionRegistry"/>
</session-management>
<intercept-url pattern="/**" access="isAuthenticated()" />
<form-login default-target-url="/" authentication-failure-url="/secure/denied" />
<logout logout-url="/secure/logout" logout-success-url="/" />
<expression-handler ref="defaultWebSecurityExpressionHandler" />
</http>
<beans:bean id="authenticationEntryPoint" …Run Code Online (Sandbox Code Playgroud) 我正在尝试找出java使用哪个环境变量来查找/检测所使用的JRE C:\ProgramData\Oracle\Java\javapath\java.exe。
根据Oracle的设计,我仅有的文件C:\ProgramData\Oracle\Java\javapath\是
java.exejavaw.exejavaws.exe如果我将其设置JAVA_HOME为空或某个随机文件夹,则使用java.exe仍然可以运行应用程序。所以我只能假设它没有使用该JAVA_HOME值。那么如何找到JRE文件夹?是否默认为特定内容?我也没有JRE_HOME设置变量。
我正在尝试让Spring Data Auditing在我的Spring 3.2.8/Spring Data 1.5/Hibernate 4项目中运行.
根据Spring Data Auditing文档,我已经@CreatedBy为我的实体添加了等等注释,由AuditorAware实现创建,并在我的JavaConfig中实例化.然而,似乎永远不会开火.
我发现文档有点令人困惑.似乎JavaConfig条目替换了xml条目,但我不确定.
orm.xml我的申请目前没有任何文件.说实话,我甚至不确定在何处/如何配置它,或者为什么我需要它.我的所有实体都在使用注释.我尝试将@EntityListeners(AuditingEntityListener.class)添加到实体,但这没有帮助.
我的当前实体管理器是在没有persistence.xml文件的情况下定义的:
<!-- entity manager -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
<property name="packagesToScan" value="com.ia.domain"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.query.substitutions">true '1', false '0'</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
<prop key="hibernate.connection.charSet">UTF-8</prop>
</props>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
JavaConfig:
@Configuration
@EnableJpaAuditing
public class AuditConfig {
@Bean
public AuditorAware<User> auditorProvider(){
return new SpringSecurityAuditorAware();
}
}
Run Code Online (Sandbox Code Playgroud)
实体:
@EntityListeners({AuditingEntityListener.class})
@Entity …Run Code Online (Sandbox Code Playgroud) 我已经开始开发一个新的Spring 3.2.4应用程序,我正在尝试使用基于Java的配置而不是过去使用过的XML文件.但是,我无法进行转换.
使用XML,我会按如下方式编写代码:
<!-- application datasource -->
<bean id="dataSource.jndi" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton" lazy-init="true">
<property name="jndiName" value="java:comp/env/jdbc/liment" />
</bean>
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="persistenceUnitName" value="persistenceUnit"/>
<property name="dataSource" ref="dataSource.jndi"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
但是,我非常想在Java中弄清楚如何做到这一点.我正在尝试复制配置,但遇到了麻烦:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages={"com.ia"})
public class AppConfigJPA {
@Bean
public DataSource dataSource() {
// configure and return the necessary JDBC DataSource
JndiObjectFactoryBean dataSource = new JndiObjectFactoryBean();
dataSource.setJndiName("java:comp/env/jdbc/liment");
try {
dataSource.afterPropertiesSet();
} catch (IllegalArgumentException | NamingException e) {
// rethrow
throw new RuntimeException(e);
} …Run Code Online (Sandbox Code Playgroud) 我试图从Spring Data查询中获得单个结果.我想从用户表中返回最大的ID.我希望它会很简单,但我有点失落.
到目前为止,基于这个相关的SO帖子,我得出结论,我需要使用a Specification来定义我的查询和Page结果,指定我想要检索的结果数.不幸的是,我收到了HibernateJdbcException数据访问异常.
我Specification/ Predicate应该相当简单并反映from User order by id:
Page<User> result =userRepository.findAll(new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
query.orderBy(cb.desc(root.get("id")));
return query.getRestriction();
}
}, new PageRequest(0, 10));
MatcherAssert.assertThat(result.isFirstPage(), is(true));
User u = result.getContent().get(0);
Run Code Online (Sandbox Code Playgroud)
异常抛出:
org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access: SQLException for SQL [n/a]; SQL state [90016]; error code [90016]; could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract …Run Code Online (Sandbox Code Playgroud) 我是AngularJS的新手,对有关事件监听器的文档感到困惑.
该文档列出了该$routeChangeSuccess事件的以下内容:
$ routeChangeSuccess解析路由依赖关系后广播.ngView侦听指令以实例化控制器并呈现视图.
类型:
广播目标:
根范围
但是,它没有引用传递给回调函数的任何参数.然而,我在SO上看到的大多数示例都有类似的回调函数列表:
$rootScope.$on("$routeChangeSuccess", function(event, next, current) {
...
});
Run Code Online (Sandbox Code Playgroud)
根据AngularJS文档,所有回调都有第一个参数event.我明白了.但是,在是next与current来自哪里?在任何文档中列出的是哪里?