gpt4 book ai didi

java - Web 服务接受对象数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:29:28 24 4
gpt4 key购买 nike

我是 JDev 和 ADF 的新手,我们需要构建一个可以接收对象数组的 Web 服务。基本上有一个 Dot Net 服务将从交换服务器读取电子邮件帐户并通过使用我们的网络服务发送所有已读取的电子邮件。因此,.net 程序可以从该帐户发送多封电子邮件并发送到我们的网络服务。到目前为止,我们已经创建了 Web 服务,它接受如下参数:

@WebMethod
public String createHdaFile(@WebParam(name = "sender") String sender,
@WebParam(name = "primaryRecipient") String primaryRecipitant,
@WebParam(name = "secondaryRecipient") String secondaryRecipitant,
@WebParam(name = "subject") String subject,
@WebParam(name = "messageBody") String messageBody,
@WebParam(name = "attachmentName") String attachmentName
){
code ...
}

想知道是否有一种方法可以接受对象数组,可以一次性接收所有电子邮件。

最佳答案

好的。首先,您应该为 xml 模式生成 XSD 文件 - 对于从 xml 生成类很有用。这是您的示例 .xsd 文件

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="message" type="message"/>
<xs:complexType name="message">
<xs:sequence>
<xs:element name="attachmentName" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="messageBody" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="primaryRecipient" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="secodaryRecipient" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="sender" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="subject" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="root" type="root"/>
<xs:complexType name="root">
<xs:sequence>
<xs:element name="message" type="message" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

第二件事是从 .xsd 文件生成 C# 和 Java 类。你可以这样做:1. 对于 Java 类,从 CMD 调用 xjc -p <package> <path_to_xsd_file.xsd>2. 对于 C# 类,从 Visual Studio 命令行 调用 xsd /C <path_to_xsd_file.xsd>

将您的 java 和 c# 类附加到您的项目中。生成的类应具有名称 rootmessage在 C# 和 Root 中和Message在Java中。

序列化解析 xml,您可以使用如下代码:1. 在 C# 端 - 序列化为 xml(字符串/字节[] <- 取决于对您有用的内容)

        MemoryStream stream = new MemoryStream();

root objectRoot = new root();
objectRoot.message = new message[2];

objectRoot.message[0] = new message();
objectRoot.message[0].attachmentName = "msg1";
objectRoot.message[0].messageBody = "mb1";
objectRoot.message[0].primaryRecipient = "pr1";
objectRoot.message[0].secodaryRecipient = "sr1";
objectRoot.message[0].sender = "s1";
objectRoot.message[0].subject = "su1";

objectRoot.message[1] = new message();
objectRoot.message[1].attachmentName = "msg2";
objectRoot.message[1].messageBody = "mb2";
objectRoot.message[1].primaryRecipient = "pr2";
objectRoot.message[1].secodaryRecipient = "sr2";
objectRoot.message[1].sender = "s2";
objectRoot.message[1].subject = "su2";

XmlSerializer serializer = new XmlSerializer(typeof(root));

serializer.Serialize(stream, objectRoot);

byte[] toSend = stream.ToArray();`

2.在java端

        byte[] requestByte;

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

Root finalizationParameters = (Root)
jaxbUnmarshaller.unmarshal(new ByteArrayInputStream(requestByte));

希望对您有所帮助。

关于java - Web 服务接受对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17966843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com