标签: jax-ws

建议在JavaEE服务器中的Web服务中使用最佳标准API协议?

我们还没有使用Webservices(实际上我们是JavaEE基础架构的新手),我将JAX-WS视为Web服务格式,但我不确定是否还有新出现的更好的解决方案,我们可以尝试.我们可以选择我们想要使用的标准,并且将使用Web服务的客户也将使用该标准.

非常感谢任何想法.

java web-services jax-ws java-ee

1
推荐指数
1
解决办法
165
查看次数

使用SoapClient从webservice读取long值

我正在用PHP写一个用肥皂消费者写一个用Java编写的ws(Jax ws).webservice导出一个函数listRooms(),它返回一个复杂数据类型Room的数组,它包含一个id(64位长)和一个描述(字符串).现在每当我使用SoapClient使用web服务时,id都会转换为float(因为PHP中没有64位整数),我想避免它.因为我需要房间id来使用其他Web服务,我宁愿避免这种隐式转换浮动,将其保存在字符串中.

有谁知道如何解决这个问题?

php soap web-services jax-ws

1
推荐指数
1
解决办法
2309
查看次数

使用JAX WS连接到SOAP

我想使用JAXWS在java中构建一个soap客户端.我在谷歌搜索但没有找到任何相关信息.这是我尝试过的:

     QName serviceName = new QName("urn:Site", "Site");
     QName portName = new QName("urn:Site", "Server_HandlerPort");
     String  endpointAddress = "http://myhost/url/soap";
     Service service = Service.create(serviceName);
     service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
     Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);
     BindingProvider bp = (BindingProvider) dispatch;
     MessageFactory factory = ((SOAPBinding) bp.getBinding()).getMessageFactory();
     SOAPMessage request = factory.createMessage();
     SOAPHeader header = request.getSOAPHeader();
     SOAPBody body = request.getSOAPBody();
     QName payloadName = new QName("session");
     SOAPBodyElement payload = body.addBodyElement(payloadName); 
     SOAPMessage reply = null;
     try {
        reply = dispatch.invoke(request);
    } catch (WebServiceException wse){
        wse.printStackTrace();
    }

    body = reply.getSOAPBody();
    QName …
Run Code Online (Sandbox Code Playgroud)

java soap jax-ws

1
推荐指数
1
解决办法
3494
查看次数

更改JAX-WS默认XML名称空间前缀

我已经使用JAX-WS 2.1.7为旧的Web服务生成了源代码。当我调用此服务时,生成的肥皂消息如下所示:

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
  <env:Header>
  </env:Header>
  <env:Body>
      ...
  </env:Body>
</env:Envelope>
Run Code Online (Sandbox Code Playgroud)

但是旧的Web服务仅接受以下格式:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    ...
  </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

如您所见,前缀是“ soap”而不是“ env”,并且没有标题,所以我收到一个错误消息,抱怨“ soap:Body”是必需的。我无法更改旧的Web服务,需要发送兼容的肥皂消息。如何将前缀更改为“ soap”并删除“ Header”?

java jax-ws

1
推荐指数
1
解决办法
5781
查看次数

JAX-WS客户端基本身份验证

我被迫从我的网络服务中删除CXF.为了删除对身份验证的任何依赖性,我设置了一个HttpAuthSupplier类来处理基本身份验证.

public class ExchangeAuthSupplier implements HttpAuthSupplier{
       @Override
       public boolean requiresRequestCaching() {
           return false;
       }

       @Override
       public String getAuthorization(AuthorizationPolicy authPolicy, URL url, Message message, String fullHeader) {
           // Lookup authentication information and return appropriate header
       }

}
Run Code Online (Sandbox Code Playgroud)

我正在试图弄清楚如何使用常规JAX-WS API和Spring来做类似的事情......

java spring jax-ws

1
推荐指数
2
解决办法
1万
查看次数

JAX-WS异常 - "return不是有效的属性"

当我尝试启动这个简单的Web服务时,我是JAX-WS的新手:

接口:

package ws;

import java.util.HashMap;
import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface IBasket {
    @WebMethod public abstract void addItem(int productId, int count);  
    @WebMethod public abstract HashMap<Integer, Integer> getBasketMap();
}
Run Code Online (Sandbox Code Playgroud)

实施班级:

package model;

import java.util.HashMap;
import javax.jws.WebService;
import ws.IBasket;

@WebService(endpointInterface = "ws.IBasket")
public class Basket implements IBasket {

    private HashMap<Integer, Integer> basket;

    public Basket() {
        this.basket = new HashMap<Integer, Integer>();
    }

    @Override
    public void addItem(int productId, int count) {
        int currentCount = 0;
        if (basket.containsKey(productId)) {
            currentCount = basket.get(productId);
        } …
Run Code Online (Sandbox Code Playgroud)

java soap jax-ws

1
推荐指数
1
解决办法
1万
查看次数

EJB作为WebService context-root消失了

我正在使用JAX-WS开发一个项目.

当我使用@WebServiceWSDL 注释我的端点类时,在控制台中标记为

.../<context-root>/XXXService?wsdl
Run Code Online (Sandbox Code Playgroud)

当我添加@Stateless这些端点时,WSDL没有在控制台中标记,实际地址是

.../XXXService/XXXEndpoint?wsdl
Run Code Online (Sandbox Code Playgroud)

这是正常的还是预期的?

更新

进一步的读者.

我找不到任何解决方案.我决定不使用混合@Stateless+ @WebService.我将这些分开@EJB@WebServices进行清晰的模块分离.

web-services ejb glassfish jax-ws

1
推荐指数
1
解决办法
1059
查看次数

JAX WSclient将存根转换为绑定提供者

在编写JAXWS客户端时,这是我过去使用的:

// CALL SERVICE
EPaymentsService bPayService = new EPaymentsService();
ServiceInterface stub = bPayService.getPort();
BindingProvider bp = (BindingProvider) stub;
Map<String, Object> rc = bp.getRequestContext();
String endPointUrl = propFile.getString(Constants.END_POINT_URL);
rc.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endPointUrl);
// RESPONSE
ResponseMessage resMessage = stub.sendMessage(reqMessage);
Run Code Online (Sandbox Code Playgroud)

在我的代码中,ServiceInterface不会扩展BindingProvider.So为什么我们在转换时不会出错

BindingProvider bp = (BindingProvider) stub;
Run Code Online (Sandbox Code Playgroud)

binding stub jax-ws

1
推荐指数
1
解决办法
7357
查看次数

如何使用带有两个参数的方法创建Web服务

例如,我必须创建一个具有以下详细信息的Web服务:

Web服务名称是WS1方法名称是initiantBatchProcess(字符串状态,整数BatchID)

我已经尝试过使用一个参数进行以下操作,但是如何使用两个参数进行操作并在webservice / soap的响应中返回它

public class WS1 
{
    int status;

    @WebMethod(operationName="status")
    public int status(int status) {
        return status;
    }
}
Run Code Online (Sandbox Code Playgroud)

java web-services jax-ws

1
推荐指数
1
解决办法
1737
查看次数

Java SOAP / JAX-WS:如何设置超时?

我正在用Java调用Web服务。它运行良好,但我也想设置连接超时。

我的代码:

URL urlwsdl = new URL ("file://" + wsdl);
QName qn = new QName("http://myserver/myservice", "MyService");
port = new TimeSeriesService_Service (urlwsdl, qn).getMyServicePort (); 

BindingProvider prov = (BindingProvider) port;
prov.getRequestContext ().put (BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://server1/myservice");
prov.getRequestContext ().put (BindingProvider.USERNAME_PROPERTY, "max");
prov.getRequestContext ().put (BindingProvider.PASSWORD_PROPERTY, "secret");

QueryRequest1 req = new QueryRequest1 ();
QueryResponse1 res = port.queryRequest1 (req);  // *** TIMEOUT for ~2 minutes
Run Code Online (Sandbox Code Playgroud)

我在互联网上找到了一些帖子。他们像我对http-auth一样使用绑定提供程序的上下文。

例如

prov.getRequestContext ().put ("com.sun.xml.ws.request.timeout", 1000000);
Run Code Online (Sandbox Code Playgroud)

但是它们使用的是我在命名空间中没有的对象。

例如

sun.net.client.defaultConnectTimeout
com.sun.xml.ws.connect.timeout
com.sun.xml.ws.request.timeout
Run Code Online (Sandbox Code Playgroud)

我有sun.net但没有.client。我有com.sun.xml,但没有.ws。

我有一个简单的Java JDK(1.7,Debian 8.3、64位),可以编译和运行我的Web服务,WebClient以及wsimport。没有安装netbeans,也没有安装jboss。

有什么想法可以设置超时时间吗?感谢帮助!克里斯

java soap web-services jax-ws

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

jax-ws ×10

java ×7

web-services ×5

soap ×4

binding ×1

ejb ×1

glassfish ×1

java-ee ×1

php ×1

spring ×1

stub ×1