我有一个JAX-WS Web服务应用程序,它作为Tomcat 7的WAR文件进行部署.它使用最新版本的Metro库,我将其包含在WAR文件中,并且工作正常.
我正在尝试简化部署包.据我所知,太阳JDK包括地铁的复印件(请参阅这个问题和这个为例),但出于某种原因,这显然是强制性的,同时一个从GlassFish网站下载,以取代地铁的这个副本.我试图了解是否有可能只使用Tomcat和JDK附带的城域网实现,或者如果不是为什么不这样做.
WAR内容如下(删除了类文件):
META-INF/MANIFEST.MF
WEB-INF/classes/
WEB-INF/classes/com/[et cetera]
WEB-INF/ibm-web-ext.xml
WEB-INF/lib/
WEB-INF/lib/stax-api.jar
WEB-INF/lib/webservices-api.jar
WEB-INF/lib/webservices-extra-api.jar
WEB-INF/lib/webservices-extra.jar
WEB-INF/lib/webservices-rt.jar
WEB-INF/lib/webservices-tools.jar
WEB-INF/sun-jaxws.xml
WEB-INF/web.xml
wsdl/
wsdl/MyService.wsdl
Run Code Online (Sandbox Code Playgroud)
web.xml 包含,部分:
<servlet>
<servlet-name>MyService</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
</servlet>
Run Code Online (Sandbox Code Playgroud)
当我从WAR中删除webservices-*jars(Metro jar)时,Web服务失败并显示错误"Wrapper找不到servlet类com.sun.xml.ws.transport.http.servlet.WSServlet或类这取决于".这并不奇怪,因为我无法在Java 7 SE附带的罐子里找到该类.
那么,如果你必须下载另一份Metro来制作像这样的工作,那么说Java 7附带Metro是什么意思呢?是否可以仅使用Java附带的jar在Tomcat中运行JAX-WS Web服务?
您知道创建Web服务客户端服务实例的成本是多少?
JavaWebService service = new JavaWebService();
SomePort port = service.getJavaWebServicePort();
Run Code Online (Sandbox Code Playgroud)
创建服务一次,然后在多线程环境(webapp)中重用相同的端口并不危险?
请注意,端口getPort和端口本身不是线程安全的,但是如果服务成本高昂,每次创建服务时都可能会产生问题.
任何的想法 ?
谢谢
在系统测试中最近部署之后,我们的一个servlet比平时受到更大的打击,我们注意到内存开始攀升,weblogic最终会死亡.我的实习生,我非常自豪,发现了内存泄漏的来源.
每当请求进入时,都会调用此行:
JAXBContext jc = JAXBContext.newInstance(“ruby.oracle_servlet.schemas”);
Run Code Online (Sandbox Code Playgroud)
出于某种原因,对象永远不会被垃圾收集.一旦我们将它静态化并移动到我们初始化它的位置,我们的内存泄漏便消失了.
我们的另一个开发人员在独立的Java应用程序中将该行放在while循环中,并且还看到了内存蠕变.
有没有人有任何想法为什么该对象不会被垃圾收集?
谢谢
我很抱歉,如果这已经得到解答,但我一直在使用的搜索术语(即JAXB @XmlAttribute压缩或JAXB XML编组到String不同的结果)没有提出任何建议.
我正在使用JAXB来取消/编组带注释@XmlElement和@XmlAttribute注释的对象.我有一个格式化程序类,它提供了两个方法 - 一个包装marshal方法并接受对象编组和一个OutputStream,另一个只接受对象并将XML输出作为String返回.不幸的是,这些方法不能为相同的对象提供相同的输出.封送到文件时,内部标记的简单对象字段@XmlAttribute将打印为:
<element value="VALUE"></element>
Run Code Online (Sandbox Code Playgroud)
当编组到一个字符串时,它们是:
<element value="VALUE"/>
Run Code Online (Sandbox Code Playgroud)
我更喜欢这两种情况的第二种格式,但我很好奇如何控制差异,并且无论如何都会满足于它们.我甚至创建了一个静态编组器,两种方法都使用它来消除不同的实例值.格式代码如下:
/** Marker interface for classes which are listed in jaxb.index */
public interface Marshalable {}
Run Code Online (Sandbox Code Playgroud)
/** Local exception class */
public class XMLMarshalException extends BaseException {}
Run Code Online (Sandbox Code Playgroud)
/** Class which un/marshals objects to XML */
public class XmlFormatter {
private static Marshaller marshaller = null;
private static Unmarshaller unmarshaller = null;
static {
try {
JAXBContext context …Run Code Online (Sandbox Code Playgroud) 我正在使用Endpoint.publish()Visual Studio中的消费发布测试WS实现.根据文档,默认的SOAP绑定是1.1,并且可以更改绑定,但我无法具体弄清楚如何更改绑定1.2.
任何帮助表示赞赏!
我正在尝试使用JAX-WS(Metro)开发独立的Java Web服务客户端,该客户端使用带有用户名令牌身份验证的WS-Security(密码摘要,随机数和时间戳)和时间戳验证以及SSL上的WS-Addressing.
我必须使用的WSDL没有定义任何安全策略信息.当WSDL不包含此信息时,我无法确切地知道如何添加此标头信息(正确的方法).我发现使用Metro的大多数示例都围绕着使用Netbeans从WSDL自动生成这个,这对我没有任何帮助.我没有太多的清晰度或方向,已经研究过WSIT,XWSS等.JBoss WS Metro看起来很有希望也没有太多运气.
任何人都有这方面的经验或有关如何完成此任务的建议?即使把我指向正确的方向也会有所帮助.除了必须基于Java之外,我不限于特定技术.
在我的WebService中,我需要记录调用者的id,但是即使使用带有密码身份验证的WS-Security对用户进行了身份验证,wsContext.getUserPrincipal()也会返回null.根据JavaDocs for JAX-WS 2.1,WSContext.getUserPrincipal()只应在用户未经过身份验证时返回null.
我是否必须在安全处理程序中执行某些操作才能将用户主体设置为WSContext?文档似乎表明它是自动完成的.
我在Tomcat上使用了带有jax-ws 2.1.3堆栈的metro 1.1堆栈(我认为是1.1.5).
JAXB简单绑定模式将集合名称修改为其复数"版本",例如"additionalData"变为"additionalDatas".有没有改变这种行为的解决方案?我需要一个Java字段名称和方法名称等于XSD字段名称.我的绑定文件:
<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xsi:schemaLocation="
http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
version="2.1">
<globalBindings>
<serializable uid="1" />
<xjc:simple/>
</globalBindings>
</bindings>
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个Glassfish托管的Web服务,该服务模仿(用于开发测试)WCF托管的Web服务.我有来自WCF托管服务的WSDL,我可以从WCF托管的WSDL构建Java服务和Java客户端,没有任何问题.WSDL使用相互证书安全性进行数据交换.
WSDL具有与WCF服务器的主机证书匹配的嵌入式X509证书.
当我尝试将我的Java客户端连接到Glassfish托管的Java服务时,我得到 - 当然 - 证书错误.
那么我采取了哪些步骤来实现这一目标?我假设:
A)我需要将WSDL中的X509证书字符串替换为我安装Glassfish时创建的自签名Glassfish证书's1as'的内容.
B)为服务器网络配置设置Glassfish服务器SSL参数,以使用随Glassfish安装提供的默认cacerts.jks和keystore.jks证书库.即使我没有在这里使用SSL,我假设服务器需要知道其信任库和密钥库在HTTP上执行相互证书安全性的位置.
C)将's1as'服务器证书添加到Java客户端的信任库中.
D)将我以前用于原始WCF连接客户端的任何证书添加到Glassfish服务器的密钥库.(我不确定这个?)
这里有什么我想念的吗?任何援助将不胜感激.
Sun Metro和Apache CXF在Java中进行Web服务开发的相对优势和劣势是什么?还有另一个我应该关注的框架吗?
java ×10
web-services ×6
jax-ws ×4
jaxb ×3
ws-security ×2
cxf ×1
eclipse ×1
glassfish-3 ×1
jaxb2 ×1
memory-leaks ×1
soap ×1
ssl ×1
tomcat ×1
xml ×1