Java Web Service:空请求参数 - java

我基于现有的第三方.NET Web服务创建了Java Web服务。这是我的Web服务界面:

package externalqueryadapter.service._01.responsereceiver;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.Action;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
import org.datacontract.schemas._2004._07.commonservices_externalqueryadapter.ExternalResponse;

@WebService(name = "ResponseReceiver", targetNamespace = "http://Service.ExternalQueryAdapter/01/ResponseReceiver")
@XmlSeeAlso({
    externalqueryadapter.service._01.responsereceiver.ObjectFactory.class,
    org.datacontract.schemas._2004._07.commonservices_externalqueryadapter_contract.ObjectFactory.class
})
public interface ResponseReceiver {

    @WebMethod(operationName = "ReceiveResponse")
    @RequestWrapper(localName = "ReceiveResponse", targetNamespace = "http://Service.ExternalQueryAdapter/01/ResponseReceiver", className = "externalqueryadapter.service._01.responsereceiver.ReceiveResponse")
    @ResponseWrapper(localName = "ReceiveResponseResponse", targetNamespace = "http://Service.ExternalQueryAdapter/01/ResponseReceiver", className = "externalqueryadapter.service._01.responsereceiver.ReceiveResponseResponse")
    @Action(input = "http://Service.ExternalQueryAdapter/01/ResponseReceiver/ResponseReceiver/ReceiveResponseRequest", output = "http://Service.ExternalQueryAdapter/01/ResponseReceiver/ResponseReceiver/ReceiveResponseResponse")
    public void receiveResponse(
        @WebParam(name = "response", targetNamespace = "http://schemas.datacontract.org/2004/07/CommonServices.ExternalQueryAdapter.Contract")
        ExternalResponse response);
}

还有我的ExternalResponse类

package org.datacontract.schemas._2004._07.commonservices_externalqueryadapter_contract;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.datatype.XMLGregorianCalendar;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "externalResponse", propOrder = {
    "requestTime",
    "userID"
})
public class ExternalResponse {

    @XmlSchemaType(name = "dateTime")
    protected XMLGregorianCalendar requestTime;
    protected String userID;

    public XMLGregorianCalendar getRequestTime() {
        return requestTime;
    }

    public void setRequestTime(XMLGregorianCalendar value) {
        this.requestTime = value;
    }

    public String getUserID() {
        return userID;
    }

    public void setUserID(String value) {
        this.userID = value;
    }
}

我成功地从Java WebService客户端收到了SOAP消息,如下所示:

<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <ReceiveResponse
            xmlns="http://Service.ExternalQueryAdapter/01/ResponseReceiver">
            <response
                xmlns="">
                <RequestTime>2013-01-30T20:00:00.000Z</RequestTime>
                <userID>olololo</userID>
            </response>
        </ReceiveResponse>
    </soapenv:Body>
</soapenv:Envelope>

但是,如果SOAP消息包含响应参数的名称空间(这是来自第三方webService客户端(我认为是.NET客户端)的消息),则我的Java WebService在null响应中会收到ExternalResponse

<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <ReceiveResponse
            xmlns="http://Service.ExternalQueryAdapter/01/ResponseReceiver">
            <response
                xmlns="http://schemas.datacontract.org/2004/07/CommonServices.ExternalQueryAdapter.Contract">
                <RequestTime>2013-01-30T20:00:00.000Z</RequestTime>
                <userID>olololo</userID>
            </response>
        </ReceiveResponse>
    </soapenv:Body>
</soapenv:Envelope>

package-info.java:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://schemas.datacontract.org/2004/07/CommonServices.ExternalQueryAdapter.Contract", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package org.datacontract.schemas._2004._07.CommonServices_ExternalQueryAdapter_Contract;

我的Java Web服务有什么问题?

参考方案

您可能无法在软件包中包含package-info.class吗?

由于无法正常工作的情况(包括TNS)与JAX-WS @WebParam匹配,所以我想知道您是否使用elementFormDefault =“ qualified”生成了JAXB(通常可以在package-info.java中看到),但是可能无法压缩它们(或将它们加载到JAXBContext中),这可能会将elementFormDefault默认设置为不合格

如果那没有帮助,则可能会粘贴WSDL / XSD并解释您如何生成JAX-WS和JAXB注释类。用wsimport?

applicationContext-service.xml问题定义 - java

在下面的spring中使用applicationContext-service.xml的代码:<bean id="mediaObjectService" class="path.MediaObjectServiceImpl"> <property name="mediaObjectDao&#…

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Java Applet的URLConnection与PHP无效 - java

我已经研究了Oracle文档和示例,但仍然无法正常工作。我有一个Java Applet,它只是尝试使用URLConnection和OutputStreamWriter通过POST将文本字段发送到PHP脚本。 Java方面似乎工作正常,没有引发异常,但是PHP在我的页面上未显示任何输出。我是PHP新手,因此请耐心等待。这是相关的Java部分: try { UR…

Java RegEx中的单词边界\ b - java

我在使用\b作为Java Regex中的单词定界符时遇到困难。对于text = "/* sql statement */ INSERT INTO someTable"; Pattern.compile("(?i)\binsert\b");找不到匹配项Pattern insPtrn = Pattern.compile(&…

带有php和爆炸式战争支持的Java应用程序服务器 - java

我正在寻找要在我的机器上安装的Java应用程序服务器,以采用EXPLODED war方式部署项目,但是我需要此服务器来支持php。我尝试将Tomcat 6与apache 2.2一起使用,但是这样做失败。 参考方案 Quercus是Caucho Technology在开源GPL许可下发布的PHP 5的100%Java实现。或者只是使用Apache处理PHP +…