Glassfish 4 用の JaxRS アプリケーションを作成しました。Jackson 2 を使用しています。問題なくビルドできますが、デプロイすると、次の 4 つのエラーのうちの 1 つ以上が発生します。
Exception while loading the app : CDI deployment failure:WELD-001408 Unsatisfied dependencies for type [IterableProvider<InjectionResolver<Object>>]
および/または
org.glassfish.deployment.common.DeploymentException: CDI deployment failure:WELD-001414 Bean name is ambiguous. Name JerseyClassAnalyzer resolves to beans [Managed Bean ...
および/または
org.jboss.weld.exceptions.DeploymentException: WELD-001409 Ambiguous dependencies for type [MultivaluedParameterExtractorProvider] ...
および/または
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Ref<ContainerRequest>]
私が知っているように、グラスフィッシュがクラスを2回ロードしようとすると、最後の例外がスローされる可能性がありますか?
直接および間接の依存関係のスクリーンショットをアップロードしました。 http://i.stack.imgur.com/HEtb1.png
他のソリューションに関して<scope>provided</scope>
、これらのクラスを含むパッケージに追加しようとしました。--> 成功しない
何か考えはありますか?
編集1:
私のリソース構成:
@javax.ws.rs.ApplicationPath("resources")
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
register( JacksonFeature.class );
}
private void addMyResources() {
//a lot of resources.
}
}
Jackson 2 を有効にするには:
public class JacksonFeature implements Feature {
public boolean configure( final FeatureContext context ) {
String postfix = '.' + context.getConfiguration().getRuntimeType().name().toLowerCase();
context.property( CommonProperties.MOXY_JSON_FEATURE_DISABLE + postfix, true );
context.register( JsonParseExceptionMapper.class );
context.register( JsonMappingExceptionMapper.class );
context.register( JacksonJsonProvider.class, MessageBodyReader.class, MessageBodyWriter.class );
return true;
}
}
そのような多くのエンティティ:
@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.None.class, property = "id", scope=Address.class)
//the JsonIdentityInfo is the reason i need Jackson 2
public class Address implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String postalCode;
private String city;
private String country;
private String street;
private String houseNumber;
@Embedded
private Coordinate coordinate;
//getters, setters , etc.
}
それから私はそのような多くのDAOを持っています:
@Stateless
public class AddressDao extends GenericDao {
public Address getAddress(long id){
return em.find(Address.class, id);
}
public List<Address> getAddresses(){
List<Address> address = em.createQuery("SELECT a FROM Address a", Address.class).getResultList();
return address;
}
}
そして、そのような多くのリソース:
@Path("dummy")
@Stateless
public class DummyResource {
@Context
private UriInfo context;
@Inject userAuth user;
@Inject addressDao AddressDao;
public DummyResource() {
}
@GET
@Produces("application/json")
public List<Address> getAddress() {
return AddressDao.getAddresses();
}
}
編集2:
新しいテスト プロジェクトを作成しました。依存関係を org.glassfish.jersey.server に追加するとすぐに、エラーが発生します。
編集3:
私はエラーでテストアプリケーションを作成しました:
http://www.file-upload.net/download-8459084/testApplication_20131229.rar.html