Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 58aea65

Browse files
committed
11_1_HW10_jersey_attach
1 parent bd2ab37 commit 58aea65

File tree

5 files changed

+54
-13
lines changed

5 files changed

+54
-13
lines changed

services/mail-api/src/main/java/ru/javaops/masterjava/service/mail/util/Attachments.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,29 @@ public static Attachment getAttachment(String name, InputStream inputStream) {
1818
// http://stackoverflow.com/questions/2830561/how-to-convert-an-inputstream-to-a-datahandler
1919
// http://stackoverflow.com/a/10783565/548473
2020
@AllArgsConstructor
21-
private static class InputStreamDataSource implements DataSource {
21+
private static class InputStreamDataSource implements ProxyDataSource {
2222
private InputStream inputStream;
2323

2424
@Override
2525
public InputStream getInputStream() throws IOException {
2626
return new CloseShieldInputStream(inputStream);
2727
}
28+
}
29+
30+
public interface ProxyDataSource extends DataSource {
2831

2932
@Override
30-
public OutputStream getOutputStream() throws IOException {
33+
default OutputStream getOutputStream() throws IOException {
3134
throw new UnsupportedOperationException("Not implemented");
3235
}
3336

3437
@Override
35-
public String getContentType() {
38+
default String getContentType() {
3639
return "application/octet-stream";
3740
}
3841

3942
@Override
40-
public String getName() {
43+
default String getName() {
4144
return "";
4245
}
4346
}

services/mail-service/pom.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,17 @@
9999
<artifactId>jersey-bean-validation</artifactId>
100100
<version>${jersey.version}</version>
101101
</dependency>
102+
<dependency>
103+
<groupId>org.glassfish.jersey.media</groupId>
104+
<artifactId>jersey-media-multipart</artifactId>
105+
<version>${jersey.version}</version>
106+
<exclusions>
107+
<exclusion>
108+
<groupId>org.jvnet.mimepull</groupId>
109+
<artifactId>mimepull</artifactId>
110+
</exclusion>
111+
</exclusions>
112+
</dependency>
102113

103114
<dependency>
104115
<groupId>org.apache.activemq</groupId>

services/mail-service/src/main/java/ru/javaops/masterjava/service/mail/rest/MailRS.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,23 @@
11
package ru.javaops.masterjava.service.mail.rest;
22

33

4+
import com.google.common.collect.ImmutableList;
5+
import org.glassfish.jersey.media.multipart.BodyPartEntity;
6+
import org.glassfish.jersey.media.multipart.FormDataBodyPart;
7+
import org.glassfish.jersey.media.multipart.FormDataParam;
48
import org.hibernate.validator.constraints.NotBlank;
9+
import ru.javaops.masterjava.service.mail.Attachment;
510
import ru.javaops.masterjava.service.mail.GroupResult;
611
import ru.javaops.masterjava.service.mail.MailServiceExecutor;
712
import ru.javaops.masterjava.service.mail.MailWSClient;
13+
import ru.javaops.masterjava.service.mail.util.Attachments;
814
import ru.javaops.masterjava.web.WebStateException;
915

16+
import javax.activation.DataHandler;
1017
import javax.ws.rs.*;
1118
import javax.ws.rs.core.MediaType;
12-
import java.util.Collections;
19+
import java.io.UnsupportedEncodingException;
20+
import java.util.List;
1321

1422
@Path("/")
1523
public class MailRS {
@@ -23,10 +31,27 @@ public String test() {
2331
@POST
2432
@Path("send")
2533
@Produces(MediaType.APPLICATION_JSON)
26-
public GroupResult send(@NotBlank @FormParam("users") String users,
27-
@FormParam("subject") String subject,
28-
@NotBlank @FormParam("body") String body) throws WebStateException {
34+
@Consumes(MediaType.MULTIPART_FORM_DATA)
35+
public GroupResult send(@NotBlank @FormDataParam("users") String users,
36+
@FormDataParam("subject") String subject,
37+
@NotBlank @FormDataParam("body") String body,
38+
@FormDataParam("attach") FormDataBodyPart attachBodyPart) throws WebStateException {
2939

30-
return MailServiceExecutor.sendBulk(MailWSClient.split(users), subject, body, Collections.emptyList());
40+
final List<Attachment> attachments;
41+
if (attachBodyPart == null) {
42+
attachments = ImmutableList.of();
43+
} else {
44+
try {
45+
String attachName = attachBodyPart.getContentDisposition().getFileName();
46+
// UTF-8 encoding workaround: https://java.net/jira/browse/JERSEY-3032
47+
String utf8name = new String(attachName.getBytes("ISO8859_1"), "UTF-8");
48+
BodyPartEntity bodyPartEntity = ((BodyPartEntity) attachBodyPart.getEntity());
49+
50+
attachments = ImmutableList.of(new Attachment(utf8name, new DataHandler((Attachments.ProxyDataSource) bodyPartEntity::getInputStream)));
51+
} catch (UnsupportedEncodingException e) {
52+
throw new IllegalStateException(e);
53+
}
54+
}
55+
return MailServiceExecutor.sendBulk(MailWSClient.split(users), subject, body, attachments);
3156
}
3257
}

services/mail-service/src/main/java/ru/javaops/masterjava/service/mail/rest/MailRestConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ru.javaops.masterjava.service.mail.rest;
22

3+
import org.glassfish.jersey.media.multipart.MultiPartFeature;
34
import org.glassfish.jersey.server.ResourceConfig;
45
import org.slf4j.bridge.SLF4JBridgeHandler;
56

@@ -13,5 +14,6 @@ public MailRestConfig() {
1314
// http://stackoverflow.com/questions/4121722
1415
SLF4JBridgeHandler.install();
1516
packages("ru.javaops.masterjava.service.mail.rest");
17+
register(MultiPartFeature.class);
1618
}
1719
}

web/webapp/src/main/webapp/WEB-INF/templates/users.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
}
7272

7373
var param;
74-
if (transport === "SOAP") {
74+
if (transport === "SOAP" || transport === "REST") {
7575
// https://stackoverflow.com/a/5976031/548473
7676
var data = new FormData();
7777
data.append('users', users);
@@ -80,14 +80,14 @@
8080
var attach = $('#attach')[0].files[0];
8181
if (attach) data.append('attach', attach);
8282
param = {
83-
url: "sendSoap",
83+
url: (transport === "REST" ? "/mail/rest/send" : "sendSoap"),
8484
data: data,
8585
contentType: false,
8686
processData: false
8787
};
88-
} else if (transport === "REST" || transport === "JMS") {
88+
} else if (transport === "JMS") {
8989
param = {
90-
url: (transport === "REST" ? "/mail/rest/send" : "sendJms"),
90+
url: "sendJms",
9191
data: "users=" + users + "&subject=" + $("#subject").val() + "&body=" + $("#body").val(),
9292
contentType: "application/x-www-form-urlencoded"
9393
};

0 commit comments

Comments
 (0)