( 转)weblogic92启动Unmarshaller failed和web-app@http://java.sun.com/xml/ns/javaee

本文解决了一个在MyEclipse中部署WebLogic时出现的问题,即使用2.5版本的web.xml导致的部署失败。通过调整web.xml文件为WebLogic支持的格式解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
就是在myeclipse里面新建个web project 部署到weblogic上后,启动时报错:
<Unable to load descriptor C:/bea/user_projects/domains/base_domain/./autodeploy/demo/WEB-INF/web.xml of module webProject. The error is weblogic.descriptor.DescriptorException: Unmarshaller failed
 at weblogic.descriptor.internal.MarshallerFactory$1.createDescriptor
Caused by: com.bea.xml.XmlException: failed to load java type corresponding to e=web-app@http://java.sun.com/xml/ns/javaee
 at com.bea.staxb.runtime.internal.UnmarshalResult.getPojoBindingType
......
 
  
意外间发现在JBoss Community网站上发现了这个问题,这个网址:https://jira.jboss.org/jira/browse/JBSEAM-2247
  
 
原来是weblogic90不支持用eclipse自动生成2.5版本的web.xml,我的如下:
 
web.xml原来配置

<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5"   
    xmlns="http://java.sun.com/xml/ns/javaee"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
      
    <welcome-file-list>  
    <welcome-file>index.html</welcome-file>  
  </welcome-file-list>  
</web-app>  
 
 
方法一:
 
换成:并且去掉version="2.5"
  
<web-app xmlns:j2ee="http://java.sun.com/xml/ns/j2ee">
 
 
方法二:
  改成sun公司的web-app_2_5.dtd标准

<?xml version="1.0" encoding="UTF-8"?> 
      <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
      "http://java.sun.com/dtd/web-app_2_5.dtd"> 
<web-app>
 
</web-app>

 

<think>好的,用户现在想修正web.xml文件以满足Java EE 3.1规范。我需要先回顾之前的对话相关引用。 用户之前的问题是关于数据库设计的第二阶段,现在到了Java EE的web.xml配置。根据用户提供的引用,引用了不同版本的web.xml配置,特别是提到Java EE 6Servlet 3.0开始支持零配置,但用户现在需要符合EE 3.1规范。 首先,我需要确定Java EE 3.1对应的Servlet版本。根据引用[3],web-app_3_0.xsd对应Servlet 3.0,而Java EE 6包含Servlet 3.0。但用户提到的是EE 3.1,可能这里有版本混淆。实际上,Java EE的版本中,3.1可能对应的是Java EE 6的一部分,或者用户可能指的是Servlet 3.0或3.1。需要澄清,但根据引用[2],Java EE 6对应Servlet 3.0,而EE 7对应Servlet 3.1。所以用户可能指的是Servlet 3.1规范,对应web.xml的版本需要调整。 接下来,用户引用的示例中,有web.xml的配置片段,比如版本2.43.0的schema。用户需要正确的头部声明。根据引用[3],web-app_3_0.xsd对应Servlet 3.0,而EE 3.1可能使用Servlet 3.0或更高。需要确认正确的schema位置版本号。 用户引用的内容中,引用[2]提到Spring支持零配置,但用户可能仍需要传统的web.xml配置。因此,需要提供符合Servlet 3.0或3.1规范的web.xml头部,并说明必要的配置元素。 另外,用户提到Java EE 3.1,但可能混淆了版本号。Java EE的版本通常是5、6、7等,而Servlet规范有2.5、3.0、3.1等。需要确认正确的对应关系。例如,Java EE 6包括Servlet 3.0,Java EE 7包括Servlet 3.1。因此,如果用户的目标是Java EE 3.1,可能实际是Servlet 3.1,需调整schema为3.1的。 同时,用户引用的[4]提到JPA配置的问题,可能与此问题无关,但需要注意是否有其他配置需求。 综合这些信息,正确的web.xml配置应该使用Servlet 3.0或3.1的schema,并更新对应的命名空间schema位置。需要检查用户提供的引用中的示例,并纠正可能的错误,如版本号schema URL是否正确。 另外,用户可能需要了解是否需要配置特定的Servlet、过滤器或监听器,以及是否可以利用注解代替部分配置,如引用[2]提到的WebApplicationInitializer。但用户明确要求修正web.xml,因此应专注于XML配置的准确性。 最后,要确保回答结构清晰,步骤明确,并引用提供的参考资料,同时生成相关问题以帮助用户进一步学习。</think>根据Java EE 3.1规范(对应Servlet 3.0规范[^3]),web.xml配置需重点关注以下核心要素: --- ### 一、基础配置规范 1. **XML声明与命名空间** 使用Servlet 3.0对应的XML Schema定义: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> ``` - 命名空间必须使用`javaee`而非历史版本中的`j2ee`[^1][^3] - `version="3.0"`明确声明规范版本 2. **元数据兼容性** 若需混合使用注解配置: ```xml <metadata-complete>false</metadata-complete> <!-- 允许扫描注解 --> ``` --- ### 二、关键组件配置 1. **Servlet 3.0增强特性** ```xml <!-- 支持异步处理 --> <servlet> <servlet-name>AsyncServlet</servlet-name> <servlet-class>com.example.AsyncServlet</servlet-class> <async-supported>true</async-supported> </servlet> ``` 2. **过滤器链配置示例** ```xml <filter> <filter-name>EncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` --- ### 三、与框架集成 1. **Spring零配置兼容方案** 虽然Servlet 3.0支持无web.xml启动(通过`WebApplicationInitializer`[^2]),若需保留XML配置: ```xml <!-- 上下文参数 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <!-- Spring监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> ``` 2. **JPA配置关联** 若涉及持久化层配置(如引用[4]提到的JPA问题): ```xml <persistence-unit-ref> <persistence-unit-ref-name>persistence/BookStorePU</persistence-unit-ref-name> <persistence-unit-name>BookStorePU</persistence-unit-name> </persistence-unit-ref> ``` --- ### 四、验证与调试 1. **Schema校验** 使用IDE的XML验证功能检查schema定位: ```xml xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" ``` - 确保URL能正确访问(部分环境需配置代理) 2. **版本冲突排查** 检查部署描述符与服务器兼容性: ```text Tomcat 7+ 支持Servlet 3.0 WebLogic 12c+ 支持Java EE 6 ``` --- ### 五、现代配置演进 虽然web.xml仍是合法配置方式,但建议逐步迁移到注解驱动: ```java // Servlet 3.0+ 编程式配置示例 public class WebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext ctx) { AnnotationConfigWebApplicationContext rootCtx = new AnnotationConfigWebApplicationContext(); rootCtx.register(AppConfig.class); ctx.addListener(new ContextLoaderListener(rootCtx)); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值