Основная проблема заключается в том, что WCDL4J, по-видимому, ожидает, что элемент TestResult будет находиться в некотором пространстве по умолчанию или в пустом пространстве имен XML, а не в пространстве имен "http://tempuri.org". Мыло, созданное службой WCF правильно создает элемент TestResponse, чтобы все его дочерние элементы находились в одном и том же пространстве имен XML, и сбрасывает пространство имен XML по умолчанию на «http://tempuri.org".
Парсер WSDL4J, похоже, ожидает, что пространство имен будет применяться только к элементу TestResponse, но не к элементу TestResult. Мне это кажется ошибкой, но, вероятно, вы ничего не можете с этим поделать.
Если вы все еще читаете, есть несколько способов исправить это. Быстрый и простой способ - заставить WCF использовать одно и то же пространство имен XML для всех элементов тела мыла, которые он создает. Для этого следуйте советам в этом сообщении MSDN для пространств имен XML для атрибутов ServiceContract и DataMember для вашей службы. Это может заставить синтаксический анализатор WSDL4J вести себя по-разному, когда он использует ваше пространство имен вместо того, которое используется по умолчанию, но нет гарантии, что это будет работать. Например:
[ServiceContract(Namespace = "http://YourCo/2011/05/18/YourDomain")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
[DataContract(Namespace = "http://YourCo/2011/05/18/YourDomain")]
public class Customer
{
[DataMember]
public string Name {get; set;}
[DataMember]
public int ID {get; set;}
}
Если это не сработает, тогда вам придется воспользоваться подходом , показанным в вопросе и ответе , который гораздо более сложен, но позволяет точно составить мыльное сообщение.