Java的JAX-WS和Metro有什么区别?它们是两个不同的JAX-WS实现相同吗?
根据我的研究,JAX-WS已经是JDK 6的一部分.但是,JAX-WS没有附带标准的JDK包,所以我找了一个Java EE jar.但是,似乎Oracle不承载已编译的Java EE jar,而是提供Glassfish作为Java EE服务器.
我能够在Glassfish上运行我的Web服务.Glassfish使用什么JAX-WS实现?由于它是托管在Oracle上的,我假设它使用Java的JAX-WS实现,它应该是JDK 1.6的一部分?我的假设是正确的吗?此外,要运行基于JAX-WS的Web服务,我需要下载JAX-WS jar.我找到了Metro.但在它的页面上,我看到地铁的链接是Glassfish的子链接.所以我现在很困惑.Glassfish使用Metro吗?或者Glassfish使用Java的JAX-WS?
Metro和Java的JAX-WS是一样的吗?
我正在使用JAX WS来公开WebService.此服务的某些操作可能会生成异常.不是内部服务器异常,而是依赖于操作调用的输入参数的异常.
如果我指定我的操作抛出自定义异常,如下所示:
@WebService
@SOAPBinding(style = Style.RPC, use = Use.LITERAL)
public class MyServiceEndpointImpl implements MyServiceEndpoint {
@WebMethod
public void throwsException throws InvalidInputException;
}
Run Code Online (Sandbox Code Playgroud)
运行应用程序时,我最终得到以下堆栈跟踪:
com.sun.xml.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.mypackage.ws.services.jaxws.InvalidInputExceptionBean is not found. Have you run APT to generate them?
at com.sun.xml.ws.model.RuntimeModeler.getClass(RuntimeModeler.java:285)
at com.sun.xml.ws.model.RuntimeModeler.processExceptions(RuntimeModeler.java:1006)
at com.sun.xml.ws.model.RuntimeModeler.processRpcMethod(RuntimeModeler.java:969)
at com.sun.xml.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:546)
at com.sun.xml.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:370)
at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:256)
at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:322)
at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:188)
at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:467)
at org.jvnet.jax_ws_commons.spring.SpringService.getObject(SpringService.java:333)
at org.jvnet.jax_ws_commons.spring.SpringService.getObject(SpringService.java:45)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport$1.run(FactoryBeanRegistrySupport.java:121)
Run Code Online (Sandbox Code Playgroud)
添加@XmlRootEntity到InvalidInputException不解决问题.
如果这不是报告Web服务故障的推荐方法,那么有更好的方法吗?我的异常是应该继承RuntimeException并依赖于传输进行错误处理(即,所有内容最终都将包含在SOAPException中)?我希望有类似Spring-WS的东西SoapFaultAnnotationExceptionResolver.是否有类似的东西可用于JAX-WS?
我正在向API请求并获取响应状态代码200.
api的json响应包括响应.
import javax.ws.rs.core.Response;
Response response = webclient.post(SomeReqString);
Run Code Online (Sandbox Code Playgroud)
如何json从Web客户端响应中将响应检索为字符串?
我的消息传递提供程序为我提供了两种不同的WSDL.
http://my.amazonaws.com:8000/webservice/?wsdl
http://my.amazonaws.com:8000/webservice/?singleWsdl
Run Code Online (Sandbox Code Playgroud)
第一个是嵌入式 WSDL.不能使用它来生成WSDL2java包,也不能使用JAX-WS来创建连接.
第二个是单个 WSDL.它可以使用CXF 3.0的WSDL2java生成Java包,并可以使用JAX-WS创建连接.它工作得很好.
请告诉我这两种WSDL之间的区别.
如果有任何错误,我想记录原始肥皂邮件请求,我正在使用JAX-WS.任何帮助将不胜感激.
只有在响应中发生异常时,是否有一种简单的方法(也就是说:不使用代理)来访问使用JAX-WS参考实现(JDK 1.5中包含的那个)更好的Web服务的原始请求/响应XML?我想记录原始的SOAP reuest,以便我可以在以后的任何webservice客户端测试它
我正在使用JAX-WS来运行一些示例Web服务.发布Web服务后,当我输入WSDL URL时,我可以看到WSDL文档.WSDL文档引用的Schema文档如下所示:
<xs:schema version="1.0" targetNamespace="http://ts.ch01/">
<xs:element name="getTimeAsElapsed" type="tns:getTimeAsElapsed"/>
<xs:element name="getTimeAsElapsedResponse" type="tns:getTimeAsElapsedResponse"/>
<xs:element name="getTimeAsString" type="tns:getTimeAsString"/>
<xs:element name="getTimeAsStringResponse" type="tns:getTimeAsStringResponse"/>
?
<xs:complexType name="getTimeAsString">
<xs:sequence/>
</xs:complexType>
?
<xs:complexType name="getTimeAsStringResponse">
?
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
?
<xs:complexType name="getTimeAsElapsed">
<xs:sequence/>
</xs:complexType>
?
<xs:complexType name="getTimeAsElapsedResponse">
?
<xs:sequence>
<xs:element name="return" type="xs:long"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么'tns'出现在元素声明中?例如:
<xs:element name="getTimeAsElapsed" type="TNS:getTimeAsElapsed"/>
我没有在架构文档中看到'tns'被声明为名称空间前缀,架构文档只是以
<xs:schema version="1.0" targetNamespace="http://ts.ch01/">
Run Code Online (Sandbox Code Playgroud)
那么为什么'tns'在引用其他元素时出现?这是JAX-WS生成的XML模式的默认行为吗?
我在Java项目中使用wsimport来生成三个SOAP Web服务的源代码.前两个工作正常:我使用JAX-WS Maven插件来获取WSDL文件并生成相应的Java源文件.
一个Web服务失败; 我收到以下错误:
[jaxws:wsimport]
Processing: /home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
jaxws:wsimport args: [-s, /home/me/NetBeansProjects/Admin/AdminWeb/target/generated-sources/jaxws-wsimport, -d, /home/me/NetBeansProjects/Admin/AdminWeb/target/classes, -verbose, -catalog, /home/me/NetBeansProjects/Admin/AdminWeb/src/jax-ws-catalog.xml, -wsdllocation, http://erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx?WSDL, -target, 2.0, -extension, -Xnocompile, /home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl]
parsing WSDL...
src-resolve.4.2: Error resolving component 's:schema'. It was detected that 's:schema' is in namespace 'http://www.w3.org/2001/XMLSchema', but components from this namespace are not referenceable from schema document 'file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl#types?schema1'. If this is the incorrect namespace, perhaps the prefix of 's:schema' needs to be changed. If this is the correct namespace, then an appropriate 'import' tag should …Run Code Online (Sandbox Code Playgroud) 我有一个RESTful webservice,它将返回字符串,它是用Java(JAX-WS)编写的.我的问题是当我使用以下URL向该webservice发送请求时:
http://localhost:8080/project/webservices/getlist/getListCustomers
在控制台中,它给出了以下错误消息:
XMLHttpRequest无法加载url Access-Control-Allow-Origin不允许使用origin localhost
我该如何处理这个问题?
Java代码:
@GET
@Path("/getsample")
public Response getMsg() {
String output = "Jersey say : " ;
return Response.status(200).entity(output).build();
}
Run Code Online (Sandbox Code Playgroud) 使用JAX-WS的典型SOAP客户端请求可能是
FooService service = new FooService();
FooPort port = service.getFooPort();
FooPayload payload = new FooPayload();
payload.setHatSize(3);
payload.setAlias("The Hat");
...
port.processRequest(payload);
Run Code Online (Sandbox Code Playgroud)
这会生成类似的HTTP请求内容
<?xml ... ?>
<S:Envelope xmlns:S="http://...soap-envelope">
<S:Body>
<!-- payload -->
</S:Body>
</S:Envelope>
Run Code Online (Sandbox Code Playgroud)
通过操作port.processRequest()调用的参数,您只能影响"payload"部分.您不能影响XML消息的外部部分.
我想在SOAP Body之前插入一个SOAP标头
<S:Header>
<X:Security xmlns:X="http://...wsssecurity...>
<X:BinarySecurityToken>kjh...897=</X:BinarySecurityToken>
</X:Security>
</S:Header>
Run Code Online (Sandbox Code Playgroud)
我怎么做?
我必须生成一个WS客户端,我无法决定使用哪个插件.到目前为止,我的选择是:jaxb2-maven-plugin,axistools-maven-plugin和jaxws-maven-plugin.