标签: jax-ws

如何使用JBossWS 3.1.2将HashMap作为@WebParam

我正在尝试使用JBossWS 3.1.2开发一个Web服务,它将HashMap作为其参数之一.我正在使用这个版本的JBossWS,因为这是与我正在使用的JBoss版本一起分发的.我正在使用wsprovide生成WSDL并使用wsconsume来创建WS客户端存根.

我的WebService的简化版本是:

@WebService(targetNamespace = "http://localhost/ping", serviceName = "Ping")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class Ping {
    @WebMethod
    @WebResult(name="result")
    public String ping(@WebParam(name="arguments") HashMap arguments) {
        return "pong";
    }
}
Run Code Online (Sandbox Code Playgroud)

wsprovide创建的WSDL包含:

<types>
    <xs:schema targetNamespace='http://localhost/ping' version='1.0' xmlns:tns='http://localhost/ping' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
        <xs:complexType name='hashMap'>
            <xs:complexContent>
                <xs:extension base='tns:abstractMap'>
                    <xs:sequence/>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
        <xs:complexType abstract='true' name='abstractMap'>
            <xs:sequence/>
        </xs:complexType>
    </xs:schema>
</types>
Run Code Online (Sandbox Code Playgroud)

生成的客户端代码包含一个空的抽象类AbstractMap.java和一个空类HashMap.

我希望生成类似于以下的WSDL:

<complexType>
    <sequence>
        <element name="key" type="anyType" />
        <element name="value" type="anyType" />
    </sequence>
</complexType>
Run Code Online (Sandbox Code Playgroud)

我也尝试用自定义类(ParameterMap)包装HashMap,但只是有更多相同的东西.

我还没有看到下一步吗?我是否遗漏了某些东西,或者这是对使用JBossWS开发Web服务的自下而上方法的限制?

java jboss jax-ws jbossws

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

Jax-ws @PreDestroy什么时候被完全调用?

我有一个简单的Web服务使用@PostConstruct@PreDestory注释.

@PostConstruct
private void init() {...} //initialize some database connection

@PreDestroy
private void release() {...} //release data base resources
Run Code Online (Sandbox Code Playgroud)

然后客户端将调用一些Web方法来执行一些数据库操作.我通过在代码中设置断点进行了简单的测试.该@PostConstruct工程的罚款.但@PreDestroy方法永远不会被调用.

我认为@PreDestroy当客户端完成调用Web方法时总会被调用,因为Web服务本质上是无状态的.所以最后,实例总是被销毁,在此之前,应该调用我的发布方法?这是正确的理解吗?

但在阅读了一些在线资源后,我感到困惑.有人说@PreDestroy当它未部署时会被调用吗?

java annotations jax-ws

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

使用WebServiceContext测试@Webservice EJB(使用OpenEJB?)

我有一些EJB作为JAX-WS Web服务:

@WebService
@Stateless
@Remote(MobileFacade.class)
public class MobileFacadeBean implements MobileFacade {
    ... 

   @Resource
   WebServiceContext wsc;

    ...
}
Run Code Online (Sandbox Code Playgroud)

在此Web Service类中,通过@Resource注入WebServiceContext.我使用此WebServiceContext来获取实现中的主体.这很有效,但现在我想知道如何(单元)测试这个课程!

到目前为止,我正在使用OpenEJB来测试我的EJB.由于Web Service类也是无状态会话Bean,我真的想在这里使用相同的方法.但是,它并不那么容易 - 当然,它抱怨在没有被称为Web服务时没有WebServiceContext.

所以第一个问题是:有没有办法在OpenEJB中模拟WebServiceContext?

如果不是,您会采用什么方法来测试这种Web服务类?

干杯,弗兰克

testing web-services cxf jax-ws openejb

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

如何从wsdl创建JAXWS Web服务服务器框架(不在IDE中)

我找不到任何如何使用JAXWS从wsdl从服务器骨架(java pojo)创建Web服务的地方.我看到的唯一教程是在NetBeans中使用自动向导,在eclipse中使用axis2.有人可以给我一些关于如何从给定的wsdl生成服务器端类的提示吗?

谢谢

UPADATE:
我只需要:
wsimport.bat -Xendorsed SOAP.WSDL
,它会创建工件.但是现在如何在服务器中实现它?

wsdl jax-ws pojo stubs

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

JAX-WS LogicalHandler和SOAPHandler

我正在编写一个Java SOAP客户端,其中多个响应以异步方式返回到Client WebService.由于响应是异步的,因此客户端必须将MessageId传递给SOAPHeader.然后,多个响应将传回相同的MessageId,使客户端能够使用许多响应映射其请求.

我有两个Handler(Protocal和Logical).我的SOAPHandler正在接收MessageId,而LogicalHander正在接收Payload或真实响应.我想以某种方式将这两条信息挂钩在一起.

我的问题是我有两个不同的代码,一个拉MessageId,另一个是Payload,但我没有办法可靠地连接两个.

我不确定我是不是在寻找一些东西.我可以从Protocal或Logical处理程序中提取Header和Payload吗?

asynchronous jax-ws

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

Webservice响应超时?

我有一个调用web服务的客户端.部分被调用的方法可能需要很长时间才能在服务器上完成(甚至长达1小时).我希望客户端等待那段时间的响应,从而保持连接的活跃!

我试图在客户端中设置以下属性,但没有成功:

((BindingProvider)port).getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 0); //0 for disabling any timeouts
Run Code Online (Sandbox Code Playgroud)

一段时间后我仍然会收到Timeout Exception.必须设置哪个属性以防止出现以下错误?

org.apache.cxf.interceptor.Fault: Transaction was rolled back, presumably because setRollbackOnly was called during a synchronization while invoking public abstract boolean my.method
    at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:166)
    at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:213)
    at org.apache.openejb.server.cxf.ejb.EjbMethodInvoker.preEjbInvoke(EjbMethodInvoker.java:146)
    at org.apache.openejb.server.cxf.ejb.EjbMethodInvoker.invoke(EjbMethodInvoker.java:72)
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:107)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:211)
    at org.apache.openejb.server.cxf.CxfWsContainer.onMessage(CxfWsContainer.java:73)
    at org.apache.openejb.server.webservices.WsServlet.service(WsServlet.java:98)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at …
Run Code Online (Sandbox Code Playgroud)

java soap web-services cxf jax-ws

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

cxf-jaxws-wsdl2java-BottomUp 方法

我现在有一个 wsdl 文件。使用 cxf 的 'wsdl2java' 命令,我将 wsdl 转换为 java 类。

我如何为 wsdl 到 java 转换后生成的接口拥有自己的实现类。?基本上我需要执行以下操作: 1.convert wsdl 到 java 类。2.为生成的类编写实现类。3.Inject cxf in this.(cxf.xml and web.xml for apache CXF) 4.Package it to a war。

我几乎看不到这种自下而上方法的教程/帮助(ir,wsdl 到 java 转换机制)

有人可以为此提供一些指示吗?

cxf wsdl2java jax-ws

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

将Crendentials从dotNet客户端传递到Java Web Service

我有一个调用java Web服务的dot net应用程序.我试图通过将凭据传递给Java服务来实现身份验证.以下是设置凭据的点网代码.如何在我的Java应用程序中获取这些凭据?它们没有设置在标题中......

 System.Net.NetworkCredential serviceCredentials = new NetworkCredential("user", "pass");
 serviceInstance.Credentials = serviceCredentials;
Run Code Online (Sandbox Code Playgroud)

serviceInstance是SoapHttpClientProtocol的一个实例.

我试过像这样注入WebServiceContext

@Resource
WebServiceContext wsctx;
Run Code Online (Sandbox Code Playgroud)

并从标题中拉出创意,但他们不在那里.

c# java web-services jax-ws

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

Node-soap无法找到调度方法

我正在尝试使用node-soap来使用SOAP api.我刚刚运行了一些localhost测试.

这是我的wsdl:http://hastebin.com/orenizosay.xml

这是我的XSD(来自WSDL):http://hastebin.com/zaqogicabo.xml

public class InsulinEndpoint {

    public static void main(String[] argv) {

        Insulin insulin = new Insulin ();
        String address = "http://localhost:8081/insulin/";
        Endpoint.publish(address, insulin);
        System.out.println("Webservices online at: " + address);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的节点测试应用程序.客户端已成功创建,client.describe()正确显示方法.

soap.createClient(url, function(err, client) {
    if (err) throw err;

    client.backgroundInsulinDose({arg0: 10}, function(err, result) {
         if(err)
            console.error(err);
        else
            console.log(result);
    });
});
Run Code Online (Sandbox Code Playgroud)

但是当我尝试调用backgroundInsulinDose时,我的回答是

<faultstring>Cannot find dispatch method for {}backgroundInsulinDose</faultstring>
Run Code Online (Sandbox Code Playgroud)

而且我的node-soap发送的XML消息是

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:tns="http://server/"><soap:Body><backgroundInsulinDose><arg0>10</arg0></backgroundInsulinDose></soap:Body></soap:Envelope>--------------------
Run Code Online (Sandbox Code Playgroud)

soap wsdl jax-ws node.js

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

如何在jax-ws请求中添加安全标头

我正在用apache cxf创建一个jax-ws客户端。我正在为spring cotext配置苦苦挣扎。我需要的只是将此标头添加到我的soap请求中:

<soapenv:Header>
  <wsse:Security  xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
     <wsse:UsernameToken wsu:Id="usernametoken">
        <wsse:Username>login</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>        
     </wsse:UsernameToken>
  </wsse:Security>
Run Code Online (Sandbox Code Playgroud)

我有三个参数:usernametoken,密码,登录名。

    <jaxws:client id="***" name="***"
              endpointName="***"
              serviceName="***"
              address="***"
              serviceClass="***"
              username="***"
              password="***"
              xmlns:tns="***">
</jaxws:client>
Run Code Online (Sandbox Code Playgroud)

上面的代码可以正常工作并发送肥皂消息,但是没有安全标头!您能给我一些如何添加标题的想法吗?

java spring cxf jax-ws cxf-client

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