WCF通过Java接收消耗它的空参数

时间:2012-07-02 11:11:46

标签: java wcf interop java-metro-framework

我遇到了尝试从Java使用它的WCF服务的问题。 WCF正在使用basicHttpBinding和非常简单的定义:

public class MyService : IMyService
{
    public int MyMethod(MyObject obj)
    {

    }
}

MyObject仅包含String属性,如下所示:

[DataContract]
public class MyObject
{
    [DataMember]
    public String Client { get; set; }

    ....
}

现在在Java中,使用Metro库,我正在创建这样的必要类:

wsimport -extension -keep -p com.myproject -Xnocompile http://localhost:3720/MyService.svc?wsdl

最后消费它:

MyService service = new MyService();
IMyService soap = service.getBasicHttpBindingIMyService();

ObjectFactory fact = new ObjectFactory();
MyObject obj = new MyObject();

obj.setClient(fact.createString("Someone"));

soap.MyMethod(obj);

使用Fiddler嗅探它,似乎数据已正确发送到包含Client属性的“Someone”值的服务。虽然在调试WCF服务时,Client属性会收到null值。任何想法如何进行?

以下是Java客户端发送的SOAP消息:

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <MyMethod xmlns="http://tempuri.org/" xmlns:ns2="http://schemas.datacontract.org/2004/07/MyProject.MyService" xmlns:ns3="http://schemas.microsoft.com/2003/10/Serialization/">
            <MyObject>
                <ns3:string>Someone</ns3:string>
                <ns3:string>123-456-789</ns3:string>
                <ns3:string>Details</ns3:string>
                <ns3:string>12345</ns3:string>
                <ns3:string>Other</ns3:string>
                <ns3:string>user</ns3:string>
                <ns3:string>2012-01-01</ns3:string>
                <ns3:string>Registered</ns3:string>
            </MyObject>
        </MyMethod>
    </S:Body>
</S:Envelope>

1 个答案:

答案 0 :(得分:0)

最后,我设法解决了这个问题。似乎问题出在Java代码中,因为替代的.NET客户端正常工作。 参数的属性设置不正确:

obj.setClient(fact.createString("Someone")); 

相反,正确的方法是

obj.setClient(fact.createMyObjectClient("Someone"));