GVKun编程网logo

Tomcat上没有sun-jaxws.xml的JAX-WS Web服务(tomcat没有jre)

15

本篇文章给大家谈谈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)

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


需要发生什么:

  1. 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 – Web服务:JAX-WS,CXF,WSDL ……那是什么一回事?

抱歉,他的新手问题.但我真的需要从这个开始.
我想访问我的 Java EE项目中的Web服务.此Web服务提供WSDL文件.所以我理解我可以使用它来构建Java代码来访问Web服务.
现在我读到Apache CXF是一个很好的框架我可以使用.但是JAX-WS的不同之处是什么?

有人可以向我解释一下吗?

解决方法

JAX-WS是一个规范(由Sun Oracle提供),用于通过使用Annotations定义Web服务.

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服务

java – 在Tomcat上部署JAX-WS Web服务

在注意到 Java 6包含javax.xml.ws之后,我就能够创建一个独立的Web服务.
我将如何在Tomcat 6中托管它?

解决方法

从 here下载地铁并执行此jar作为
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作为返回值吗?

java – 我可以在JAXWS Web服务方法中返回Hibernate Entities作为返回值吗?

任何人都可以告诉我,我可以将Hibernate实体作为JAXWS Web服务方法中的返回值返回!

的确,我有一些这样的实体:

@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?

java – 有没有人在Metro上本地解析schemaLocation的jax-ws-catalog.xml?

我在我的.war文件中添加了一个jax-ws-catalog.xml,以便在本地而不是远程解析schemaLocation.我跟着这个例子

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?

解决方法

你在哪里放置jax-ws-catalog.xml和WSDL文件?

您提到您正在使用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?等相关内容,可以在本站寻找。

本文标签: