我在我的.war文件中添加了一个jax-ws-catalog.xml,以便在本地而不是远程解析schemaLocation.我跟着这个例子
Metro用户指南:2.10.使用本地打包的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?
我之前使用wsimport生成了一个Metro客户端,但在这种情况下,WSDL是通过https访问的.我的命运看起来像这样:
wsimport https://service.net/services/Service?wsdl -d C:\ClientProject\src\main\java -keep
Run Code Online (Sandbox Code Playgroud)
一切都很好.现在我正在尝试生成一个客户端,但是,我只有一个WSDL文件的本地副本.我的项目目录设置如下(在c:\ Devel中):
ClientProject
|- src
|- main
|- java
|- resources
|- META-INF
|- service.wsdl
|- wsimport.bat
Run Code Online (Sandbox Code Playgroud)
wsimport.bat文件如下所示:
wsimport -keep -d ../src/main/java -wsdlLocation ../src/resources/META-INF/service.wsdl
Run Code Online (Sandbox Code Playgroud)
它基于Metro Guide示例,但没有-p选项(http://metro.java.net/guide/Developing_client_application_with_locally_packaged_WSDL.html).但是,当我运行bat文件时,我得到一个无限循环的命令被打印到控制台.例如
C:\Devel\ClientProject>wsimport -keep -d ../src/main/java -wsdlLocation ../src/resources/META-INF/service.wsdl
Run Code Online (Sandbox Code Playgroud)
有人可以指出我做错了什么吗?
UPDATE
我尝试使用绝对路径(并重新排列参数顺序无济于事.我仍然得到无尽的命令控制台打印:
wsimport C:\Devel\ClientProject\src\resources\META-INF\service.wsdl -d C:\Devel\ClientProject\src\main\java -keep
Run Code Online (Sandbox Code Playgroud) 我有一个看起来或多或少像这样的Metro jax-ws webservice:
@WebService
@Transactional
public class UserManagementServiceImpl {
@Resource
private WebServiceContext context;
...
}
Run Code Online (Sandbox Code Playgroud)
该WebServiceContext是百达空.但是,如果我删除@Transactional了注入的WebServiceContext.
有人知道解决方法吗?
谢谢.
我正在使用Metro 2客户端来使用"Java中的安全wcf Web服务".但是,在很长一段时间后,Metro客户端没有给出任何响应并保持挂起模式,因为它产生的输出是错误的:
堆栈跟踪:
SEVERE: WSSMSG0001: Error occurred while buffering incoming SOAP message.
com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x1a
at [row,col {unknown-source}]: [1,6396222]
at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:606)
at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:479)
at com.ctc.wstx.sr.StreamScanner.reportIllegalChar(StreamScanner.java:2442)
at com.ctc.wstx.sr.StreamScanner.validateChar(StreamScanner.java:2389)
at com.ctc.wstx.sr.StreamScanner.resolveCharEnt(StreamScanner.java:2355)
at com.ctc.wstx.sr.StreamScanner.fullyResolveEntity(StreamScanner.java:1501)
at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2726)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1065)
at com.sun.xml.ws.util.xml.XMLStreamReaderToXMLStreamWriter.bridge(XMLStreamReaderToXMLStreamWriter.java:142)
at com.sun.xml.ws.message.stream.StreamMessage.writePayloadTo(StreamMessage.java:376)
at com.sun.xml.ws.message.stream.StreamMessage.writeEnvelope(StreamMessage.java:412)
at com.sun.xml.ws.message.stream.StreamMessage.writeTo(StreamMessage.java:390)
at com.sun.xml.ws.security.message.stream.LazyStreamBasedMessage.readMessage(LazyStreamBasedMessage.java:476)
at com.sun.xml.wss.jaxws.impl.SecurityTubeBase.verifyInboundMessage(SecurityTubeBase.java:444)
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processClientResponsePacket(SecurityClientTube.java:434)
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processResponse(SecurityClientTube.java:362)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:972)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:910)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775)
at com.sun.xml.ws.client.Stub.process(Stub.java:429)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:168)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:102)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:151)
at …Run Code Online (Sandbox Code Playgroud) java wcf web-services java-metro-framework webservice-client
我想对我们的一些web服务进行一些junit测试.不只是调用Java代码,而是通过javax.xml.ws.EndpointJAX-WS堆栈来确保事情正常运行.我们使用Java 7中的默认实现进行测试 - 根据wsimport测试Metro 2.2.4 - 以及Java 6中用于生产的默认实现.
但是,典型的http绑定需要一个TCP/IP端口来绑定,我想知道是否有可能避免TCP/IP层同时保留其余的JAX-WS堆栈.
似乎com.sun.xml.ws.transport.local.InVmServer支持"in-vm"传输,它确实完成了这一点,但我在理解相当简洁的文档以及如何从中获取并从中获取时遇到了一些麻烦在maven调用的junit 4测试中.
所以,我的问题是:我如何 - 在maven调用的junit设置中 - 使用"in-vm"传输(可能使用执行程序)启动端点,并从客户端调用它,然后关闭端点.另外,您对此有何体验?
我正在开发一个已经metro基于Web服务客户端实现的项目.现在,我需要为不同的服务添加另一个客户端.我实现了新的客户端,但是现在它在有标题时抛出异常(需要标题).如果我删除所有地铁罐,这个新客户端工作正常,但显然我的城域客户端失败.我需要有关可能的选项,解决方法或解决方案的指导.
Caused by: javax.xml.ws.WebServiceException: java.lang.ClassCastException: com.sun.xml.ws.message.saaj.SAAJHeader cannot be cast to com.sun.xml.ws.security.opt.impl.outgoing.SecurityHeader
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processRequest(SecurityClientTube.java:250)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:961)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:910)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775)
at com.sun.xml.ws.client.Stub.process(Stub.java:429)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:168)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:102)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:151)
at com.sun.proxy.$Proxy70.methodName(Unknown Source)
... 15 more
Caused by: java.lang.ClassCastException: com.sun.xml.ws.message.saaj.SAAJHeader cannot be cast to com.sun.xml.ws.security.opt.impl.outgoing.SecurityHeader
at com.sun.xml.ws.security.opt.impl.JAXBFilterProcessingContext.setJAXWSMessage(JAXBFilterProcessingContext.java:166)
at com.sun.xml.wss.jaxws.impl.SecurityTubeBase.secureOutboundMessage(SecurityTubeBase.java:381)
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processClientRequestPacket(SecurityClientTube.java:323)
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processRequest(SecurityClientTube.java:247)
Run Code Online (Sandbox Code Playgroud)
我发现这里有类似问题的问题很少,但他们最终都建议删除不适合我的标题.
PS:对于使用metro jar的现有webservice客户端,我们使用服务器方提供的连接器(如客户端(它实际上包括所有与地球相关的类)的连接器连接到他们的服务器(我认为这非常奇怪) .如果我从连接器移动任何东西,它将使支持协议无效.所以我不想删除地铁罐,而是找到适应它的替代方法.
我正在使用Metro 2.0和J2SE5。我编写的应用程序在编译时不了解外部WebService,它在运行时基于业务逻辑XML文件找到它们,因此我执行WSDL请求。
我编写的示例代码如下:
String wsdlServiceName = ...;
String wsdlURL = ...;
Document payload = ...;
final String nsURI = ...;
final QName serviceName = new QName(nsURI, wsdlServiceName + "Service");
final QName servicePort = new QName(nsURI, wsdlServiceName + "Port");
// Create service and the dispatcher for the SOAP message
Service service = Service.create(new URL(wsdlURL), serviceName);
dispatch = service.createDispatch(servicePort, SOAPMessage.class, Service.Mode.MESSAGE);
// Set timeouts
dispatch.getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 3000);
dispatch.getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", 3000);
// Create the outgoing SOAP request
SOAPBinding soapBinding = (SOAPBinding) dispatch.getBinding();
request = soapBinding.getMessageFactory().createMessage(); …
Run Code Online (Sandbox Code Playgroud) 我将开始一个新WPF项目,我正在考虑通过这种Metro UI方法实现它.
由于这个UI尚未流行,而且我的项目将在2012年初发布,是否值得在我的应用程序中实现Metro UI?
有哪些替代方案?
与JDK6捆绑在一起的JAX-WS实现可用于提供Web服务服务器,而无需任何其他库.JVM将从指定端口上的WS服务器开始.
http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/
http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2_pt2/
我的问题是,这与Metro项目有何不同?如果最终目标是在tomcat中托管Web服务,那么我是否仍然可以使用捆绑功能然后重定向到这个捆绑的ws服务器,还是更好地部署metro servlet?
我正在使用 Metro 调用 SOAP Web 服务。我从我无法控制的服务器接收到 SOAP 响应,其正文中包含无效字符引用。我想在 Metro 解组 XML 并向我的客户端抛出异常之前修复该 XML。这可能吗?
我尝试添加 aLogicalHandler和 a ,但是当我尝试获取有效负载(分别SOAPHandler失败)时,它们都会抛出相同的解组异常。当响应没有无效的 XML 时,处理程序工作正常,让我可以访问消息。LogicalMessage.getPayload()SOAPMessageContext.getMessage()
异常如下所示:
com.sun.xml.internal.ws.encoding.soap.DeserializationException: Failed to read a response: javax.xml.bind.UnmarshalException
- with linked exception:
[javax.xml.stream.XMLStreamException: ParseError at [row,col]:[7,2653]
Message: Character reference "&#]
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:421)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:357)
at com.sun.xml.internal.bind.v2.runtime.BridgeImpl.unmarshal(BridgeImpl.java:109)
at com.sun.xml.internal.bind.api.Bridge.unmarshal(Bridge.java:222)
at com.sun.xml.internal.ws.client.sei.ResponseBuilder$DocLit.readResponse(ResponseBuilder.java:539)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:110)
... 41 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[7,2653]
Message: Character reference "&#
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:598)
at com.sun.xml.internal.ws.util.xml.XMLStreamReaderFilter.next(XMLStreamReaderFilter.java:81)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:182)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:355)
Run Code Online (Sandbox Code Playgroud)
有没有办法可以获取原始有效负载,修复它并替换回来并继续?