我想得到
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prin="http://localhost/example"> <soapenv:Header/> <soapenv:Body> THIS </soapenv:Body> </soapenv:Envelope>
来自Web服务请求我从Java发送.
我使用javax.jws
我有使用NetBeans IDE自动生成的JAX-WS样式Web服务客户端.
生成的代理工厂(扩展javax.xml.ws.Service)将代理创建委托给各种Service.getPort方法.我正在维护的应用程序实例化工厂并在每次调用目标服务时获取代理.
考虑到为每个实例化重新检索提供给工厂构造函数的WSDL文档(HTTP URI),重复创建新的代理工厂实例已被证明是昂贵的.
我们通过缓存WSDL成功地提高了性能.但这对我们来说具有难看的维护和包装含义.
我想探讨缓存代理工厂本身的适用性.是否安全,例如,在同一JVM上执行并且针对同一Web服务的两个不同的客户端类是否可以安全地使用相同的工厂来获取不同的代理对象(或共享的,可重入的代理对象)?
我一直无法从JAX-WS规范和javax.xml.ws API文档中找到指导.我不清楚工厂代理的多样性.拥有Service.getPort而不是Service.createPort并不会激发信心.
我想创建一个暴露多个端口类型的SOAP服务,其中每个端口类型都有一个单独的接口.我正在尝试使用JAX-WS 2.0来做到这一点.
例:
interface A:
ObjectA get(String name);
interface B:
ObjectB get(String name);
Service:
port A
get
port B
get
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是@WebService是使用单个类/接口定义的,所以我能够设置它的唯一方法是拥有两个独立的服务.每个服务由一个带有@WebService注释的单独类实现.
我想使用相同的服务公开这两个端口,以明确它们都是同一API的一部分.这可能吗?
真的,我所追求的是在WSDL中有一些嵌套的命名空间支持,所以我可以在不同的命名空间中使用相同的方法.我将获取/设置/删除彼此相邻的不同类型数据的方法,但我宁愿不将它们全部放在与getA/getB相同的大接口中,依此类推,因为我希望能够稍后添加新数据类型而不强制所有客户端从新的WSDL集重新生成.任何有关实现此目的的提示都是受欢迎的,即使这意味着使用另一种从java代码生成WSDL的方法.
我试着通过JAX-WS访问SharePoint列表中所描述的在这里
但是,当运行下面的代码时,我得到:
java.lang.Exception: Exception. See stacktrace.com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 401: Unauthorized
Run Code Online (Sandbox Code Playgroud)
Sharepoint需要NTLM身份验证.可能是什么问题?非常感谢!
public static ListsSoap sharePointListsAuth(String userName, String password) throws Exception {
ListsSoap port = null;
if (userName != null && password != null) {
try {
Lists service = new Lists();
port = service.getListsSoap();
System.out.println("Web Service Auth Username: " + userName);
((BindingProvider) port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, userName);
((BindingProvider) port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
} catch (Exception e) {
throw new Exception("Error: " + e.toString());
}
} else {
throw new Exception("Couldn't …Run Code Online (Sandbox Code Playgroud) 如何编写JAX-WS服务,以便@WebMethod的@WebParam是像DateTime这样的Joda-Time类?参数上的@XmlTypeAdapter会起作用吗?我正在部署到GlassFish 2.1.
让我澄清一下这个问题,因为到目前为止这两个答案都集中在将自定义类型绑定到现有的JAXB类上,这与我要问的问题有关.如何使以下@WebService接受joda DateTime对象作为参数?
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import org.joda.time.DateTime;
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface Resender {
@WebMethod
void resend(
@WebParam(name = "start") DateTime start,
@WebParam(name = "end") DateTime end
);
}
Run Code Online (Sandbox Code Playgroud) 我对Web服务很陌生.我无法找到JAX-WS和CXF之间的区别.
根据我的理解,JAX-WS是java和CXF提供的规范的实现.
如果我错了,请纠正我.
我正在使用客户端的WSDL文件,该文件对输入和输出消息使用相同的元素定义,但是我无法让JAX-WS/JAXB解组响应.
<wsdl:message name="invokeServiceRequest">
<wsdl:part element="impl:requests" name="multiRequestWrapper"/>
</wsdl:message>
<wsdl:message name="invokeServiceResponse">
<wsdl:part element="impl:requests" name="result"/>
</wsdl:message>
<wsdl:portType name="GCGatewayPortType">
<wsdl:operation name="requests">
<wsdl:input message="impl:invokeServiceRequest" name="invokeServiceRequest"/>
<wsdl:output message="impl:invokeServiceResponse" name="invokeServiceResponse"/>
</wsdl:operation>
</wsdl:portType>
Run Code Online (Sandbox Code Playgroud)
由于某种原因,wsimport生成的代码具有void返回,并且在收到响应时似乎不更新INOUT参数.
/**
* This class was generated by the JAX-WS RI.
* JAX-WS RI 2.1.7-b01-
* Generated source version: 2.1
*/
...
@WebMethod
@RequestWrapper(localName = "requests", targetNamespace = "http://cg.test.com/", className = "com.test.cg.RequestsType")
@ResponseWrapper(localName = "requests", targetNamespace = "http://cg.test.com/", className = "com.test.cg.RequestsType")
public void requests(
@WebParam(name = "paramOne", targetNamespace = "http://cg.test.com/", mode = WebParam.Mode.INOUT)
Holder<String> paramOne, …Run Code Online (Sandbox Code Playgroud) 我正在使用JAXWS RI在Java中创建WebService.在自动部署应用程序WAR时会创建WSDL文件.问题是我希望WSDL文件中的参数(每个操作都收到)具有重要的名称,但是它们显示为arg0,arg1,arg2 ...有没有办法为这些参数定义名称而不是使用默认名称?
我已经实现了以下内容:
WebService接口
@WebService
@SOAPBinding(style = Style.RPC)
public interface WS2 {
@WebMethod String confirmaXML(String lrt_id);
}
Run Code Online (Sandbox Code Playgroud)
WebService接口实现
@WebService(endpointInterface = "vital.tde.ws2.WS2")
public class WS2Imp implements WS2{
public String confirmaXML(String lrt_id) {
String respuesta = null;
//CODE
return respuesta;
}
Run Code Online (Sandbox Code Playgroud)
太阳jaxws.xml
<?xml version="1.0" encoding="UTF-8"?>
<endpoints
xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version="2.0">
<endpoint name="WS2" implementation="vital.tde.ws2.WS2Imp" url-pattern="/WS2" />
</endpoints>
Run Code Online (Sandbox Code Playgroud)
web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>WS2</display-name>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>WS2</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>WS2</servlet-name>
<url-pattern>/WS2</url-pattern> …Run Code Online (Sandbox Code Playgroud) 这是否意味着XML元素是强制性的?或者XML元素必须具有一些非null值?我对javadoc解释感到困惑.
我在ubuntu下的jboss上部署了简单的"HelloWorld"Web服务.我创建了简单的客户端,但我无法让它工作.每次运行客户端时,我都会收到NullPointerException.
请注意,我在Ubuntu下运行Oracle Java 7.
这是代码:HelloWorldClient.java
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class HelloWorldClient {
public static void main(String[] args){
URL url;
try {
url = new URL("http://localhost:8080/WebServiceProject/helloWorld?wsdl");
QName qname = new QName("http:///", "HelloWorldImplService");
Service service = Service.create(url, qname);
HelloWorld hello = service.getPort(HelloWorld.class);
System.out.println(hello.sayHello("mkyong"));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
}
HelloWorld.java
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface HelloWorld {
@WebMethod
public String sayHello(String name);
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
Exception in thread …Run Code Online (Sandbox Code Playgroud)