本篇文章给大家谈谈Tomcat上没有sun-jaxws.xml的JAX-WSWeb服务,以及tomcat没有jre的知识点,同时本文还将给你拓展java–Web服务:JAX-WS,CXF,WSDL……
本篇文章给大家谈谈Tomcat上没有sun-jaxws.xml的JAX-WS Web服务,以及tomcat没有jre的知识点,同时本文还将给你拓展java – Web服务:JAX-WS,CXF,WSDL ……那是什么一回事?、java – 在Tomcat上部署JAX-WS Web服务、java – 我可以在JAXWS Web服务方法中返回Hibernate Entities作为返回值吗?、java – 有没有人在Metro上本地解析schemaLocation的jax-ws-catalog.xml?等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- Tomcat上没有sun-jaxws.xml的JAX-WS Web服务(tomcat没有jre)
- java – Web服务:JAX-WS,CXF,WSDL ……那是什么一回事?
- java – 在Tomcat上部署JAX-WS Web服务
- java – 我可以在JAXWS Web服务方法中返回Hibernate Entities作为返回值吗?
- java – 有没有人在Metro上本地解析schemaLocation的jax-ws-catalog.xml?
Tomcat上没有sun-jaxws.xml的JAX-WS Web服务(tomcat没有jre)
我试图在Tomcat上部署基于JAX-WS的Web服务时最小化所需的配置。随着Servlet 3.0的引入(Tomcat
7+支持),web.xml
可以扔掉,但仍然存在sun-jaxws.xml
。这篇博客文章很有趣:
当然,通过使用jax-ws批注,甚至可以将配置sun-jaxws.xml设为可选,使其完全不包含描述符,但这需要指定默认的url-
pattern(例如JSR-109)或自定义模式(例如Jersey REST) JAX-WS规范中的服务。
有可能避免sun-jaxws.xml
在Tomcat上运行,如何避免?
答案1
小编典典可悲的是,该配置 必须 存在 于某处 。根据消息来源,这是强制性的。信不信由你,sun-
jaxws.xml文件的位置被硬编码为/WEB-
INF/sun-jaxws.xml(谢谢,伙计们@ Metro)。
有效地,您需要控制以下类别
public final class WSServletContextListener
public class WSServlet
需要发生什么:
WSServletContextListener
显然不会扩展。该侦听器根据sun-jaxws.xml和jaxws-catalog文件执行大多数初始化。就像我之前提到的,位置是硬编码的。因此,您这里阻力最小的方法是实现自己的香草servlet监听器(使用
@WebListener
)并调用new WSServletContextListener()
。然后,您将自己的contextInitialized(ServletContext ctxt)
和contextDestroyed()
方法委托给您的实例中的方法WSServletContextListener
。使用
@XmlRootElement
将代表sun-jaxws文件的类动态地在侦听器实例化时生成文件(我将在很短的时间内提供一个示例,现在没有时间:)) 。
IMO带来如此麻烦的麻烦,但从理论上讲应该是可行的。我将写一些示例,然后看它们如何播放。
java – Web服务:JAX-WS,CXF,WSDL ……那是什么一回事?
我想访问我的 Java EE项目中的Web服务.此Web服务提供WSDL文件.所以我理解我可以使用它来构建Java代码来访问Web服务.
现在我读到Apache CXF是一个很好的框架我可以使用.但是JAX-WS的不同之处是什么?
有人可以向我解释一下吗?
解决方法
Apache CXF是一个实现JAX-WS以生成Web服务定义和Java代理的框架(来自Web服务定义)
Apache Axis 2也是一个现在支持JAX-WS的框架(直到JAX-WS 2).这是Apache Axis的改进. CXF最多支持JAX-WS 1.2.
简要教程可以找到here.
java – 在Tomcat上部署JAX-WS Web服务
我将如何在Tomcat 6中托管它?
解决方法
java -jar metro-2_0-ea.jar
metro目录包含两个ant文件,metro-on-glassfish.xml和metro-on-tomcat.xml.这两个文件用于将Metro二进制文件安装到相应的Web容器中.
Tomcat的安装过程:
> shutdown.bat(Tomcat关闭)
>在命令提示符下执行以下行
ant -Dtomcat.home = -f /metro-on-tomcat.xml安装
startup.bat(Tomcat开始)
安装过程将两个Metro jar文件复制到Tomcat的shared / lib目录中.没有修改Tomcat配置文件.
java – 我可以在JAXWS Web服务方法中返回Hibernate Entities作为返回值吗?
的确,我有一些这样的实体:
@Entity public class Parent { ... private Childone childoneByChildoneid; @ManyToOne public @javax.persistence.JoinColumn(name="ChildOneId",referencedColumnName="Id") Childone getChildoneByChildoneid() { return childoneByChildoneid; } public void setChildoneByChildoneid(Childone childoneByChildoneid) { this.childoneByChildoneid = childoneByChildoneid; } ... } @Entity public class Childone { ... private Collection<Parent> parentsById; @OnetoMany(mappedBy = "childoneByChildoneid") public Collection<Parent> getParentsById() { return parentsById; } public void setParentsById(Collection<Parent> parentsById) { this.parentsById = parentsById; } ... }
并有这样的服务:
@Stateless @WebService() public class MasterDataService { @EJB private MasterDataManager manager; @WebMethod public Parent getParent(int parentId) { return manager.getParent(parentId); } } @Stateless public class MasterDataManager { @PersistenceContext EntityManager em; public Parent getParent(int parentId) { Parent parent = (Parent) em.createquery( "select p from Parent p where p.id=:parentId") .setParameter("parentId",parentId).getSingleResult(); return parent; } }
当我从客户端调用此Web方法时,我得到LazyInitializationException异常:(
我测试Serializable和Cloneable接口并覆盖克隆方法但不幸的是它不起作用,我在管理器中使用em.detach(父),但它仍然不起作用.
谁能帮我?
tnax
解决方法
>返回实体,但要确保它们已初始化.使用fetch = FetchType.EAGER标记@ * ToMany或使用Hibernate.initialize(..).异常的原因是默认情况下,在请求之前,不会从数据库中提取实体中的所有集合.但是当你从jax-ws序列化程序请求它们时,hibernate会话已经关闭.从技术上讲,你可以有一些OpenSessionInViewIntercepetor,但我不认为有一些可以随时使用的JAX-WS,写一个可能是个问题.如果您不想传输这些集合,可以使用@XmlTransient(或@JsonIgnore,根据序列化技术)对它们进行注释.它使实体有点混乱,但我仍然更喜欢它来编码重复.
>使用DTO(数据传输对象) – 将所有数据从实体传输到具有类似结构的新对象,该对象将由Web服务公开.再次,您必须确保在休眠会话处于活动状态时填充DTO
我更喜欢第一个选项,因为它需要较少的biolerplate代码,但我同意在使用它时应该非常小心实体状态管理.
java – 有没有人在Metro上本地解析schemaLocation的jax-ws-catalog.xml?
Metro User Guide: 2.10. Developing client application with locally packaged WSDL
当我部署.war并使用soapUI来验证Web服务时,它会卡住尝试访问schemaLocation http:// somehost:8080 / CMDB / schemas / common / 1.0 / CMDBCommonTypes.xsd
架构和wsdl都在Eclipse中验证(使用Eclipse的XML Catalog工具). (如果有帮助的话,我可以发布我的jax-ws-catalog.xml和相关的xsd和wsdl的内容.
谷歌搜索发现了许多其他问题,jax-ws-catalog.xml无法在Metro堆栈中运行.
有没有人在Metro中使用jax-ws-catalog.xml?
解决方法
您提到您正在使用WAR,但在WAR中,jax-ws-catalog.xml的位置取决于您是尝试将其作为WS客户端还是作为WS Endpoint发布者(服务器)进行访问.
如果您从WAR中访问外部Web服务,那么您的jax-ws-catalog.xml需要进入app.war / WEB-INF / classes / meta-inf目录,
或者,如果您在应用程序中部署了合同第一个Web服务,并且具有@WSDLLocation批注,那么对于该WSDL,jax-ws在app.jar / meta-inf中查找jax-ws-catalog.xml
因此对于客户端WSDL位置app.war / WEB-INF / classes / meta-inf / jax-ws-catalog.xml
使用@WSDLLocation注释合同第一个WS端点app.war / meta-inf
如果要同时执行这两个操作(即发布(合同优先)以及使用Web服务),则需要在两个位置放置jax-ws-catalog.xml WSDL,即app.jar / WEB-INF / classes / Meta -INF和app.jar / meta-inf
我已经在我的许多项目中成功使用了上述方法,这些项目同时发布和使用Web服务,我可以保证它按预期工作.
关于Tomcat上没有sun-jaxws.xml的JAX-WS Web服务和tomcat没有jre的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于java – Web服务:JAX-WS,CXF,WSDL ……那是什么一回事?、java – 在Tomcat上部署JAX-WS Web服务、java – 我可以在JAXWS Web服务方法中返回Hibernate Entities作为返回值吗?、java – 有没有人在Metro上本地解析schemaLocation的jax-ws-catalog.xml?等相关内容,可以在本站寻找。
本文标签: