When I run the following code, the client mail service opens up with the To:, Subject:, Body: except the attachment which is highly needed. I couldn't figure out why the attachment is not adding into the mail.
public static void main(String[] args) throws FileNotFoundException, IOException {
final String HTML = "<h1>Hello</h1>"
+ "<p>This was created using iText</p>"
+ "<a href='hmkcode.com'>hmkcode.com</a>";
String filePath = "C:/Users/HP/Desktop/pdfTest/a.txt";
HtmlConverter.convertToPdf(HTML, new FileOutputStream(filePath, true));
Desktop desktop = Desktop.getDesktop();
try {
// Open user-default mai
// l client application.
String message = "mailto:username#domain.com?subject=New_Profile&body=see%20body%20content&attachment=" + filePath;
URI uri = URI.create(message);
desktop.mail(uri);
} catch (IOException e) {
e.printStackTrace();
}
SpringApplication.run(DemoApplication.class, args);
}
According to using mailto to send email with an attachment there is no support for attachments in mailto uri. And I, too, think that this is quite a logical behavior, for file access being extremly dangerous in a security point of view.
Related
I am new to server programming and websockets and I've learnt a little bit of Java 8 this year. In school we had a project where a client webpage opens your webcam, takes a photo of a barcode and then shows a photo and the nutritional value of said product. You can also just send a raw barcode number and that is what is done in this example
My side of the project was to implement a java websocket server (the backend) using the glassfish tyrus library, then receiving the number of the barcode in string format and making a request to openfoodfacts.org using their api. Finally I parsed the json file and sent it back as string format so the client app can read the string and show the correct information (product name, image url, etc)
My code is organized into two files, Serveur.java establishes a websocket server for the client to connect to and ProduitApi.java gets the information from openfoodfacts.org with the given barcode from the client.
public class Serveur {
#javax.websocket.server.ServerEndpoint(value = "/websocket")
public static class EndPoint {
#javax.websocket.OnClose
public void onClose(javax.websocket.Session session, javax.websocket.CloseReason close_reason) {
System.out.println("onClose: " + close_reason.getReasonPhrase());
}
#javax.websocket.OnError
public void onError(javax.websocket.Session session, Throwable throwable) {
System.out.println("onError: " + throwable.getMessage());
}
#javax.websocket.OnMessage
public void onMessage(javax.websocket.Session session, String message) {
System.out.println("Message from client: " + message);
//Creation du produit avec le message du client
try {
ProduitApi produit = new ProduitApi(message);
session.getBasicRemote().sendText(produit.print());
} catch (Exception e) {
e.printStackTrace();
}
}
#javax.websocket.OnOpen
public void onOpen(javax.websocket.Session session, javax.websocket.EndpointConfig ec) throws java.io.IOException {
System.out.println("OnOpen... " + ec.getUserProperties().get("Author"));
session.getBasicRemote().sendText("{\"Handshaking\": \"Yes\"}");
}
}
public static void main(String[] args) {
Server server;
server = new Server ("localhost", 8025, "/BetterFood", null, EndPoint.class);
try {
server.start();
System.out.println("--- server is running");
System.out.println(java.nio.file.FileSystems.getDefault().getPath("client") );
System.out.print("Please press a key to stop the server.");
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
reader.readLine();
} catch (Exception e) {
e.printStackTrace();
} finally {
server.stop();
}
}
}
as you can see, when I receive the 'barcode' message, onMessage() gets called. There I instantiate an object of class ProduitApi to use the barcode to then return the information
This is my ProduitApi file without some unnecessary details
package com.gabi.serveur;
/**
*
* #author gabriel
*/
[imports]
public class ProduitApi {
private java.lang.String barcode;
final private java.net.URL url;
private java.net.URLConnection connection;
JsonObjectBuilder constructeur_objet = Json.createObjectBuilder();
String string_json;
ProduitApi(java.lang.String barcode)throws MalformedURLException, IOException {
this.barcode = barcode;
this.url = new java.net.URL("http://world.openfoodfacts.org/api/v0/product/" + this.barcode + ".json");
connection = url.openConnection();
stream();
}
public void stream() throws IOException{
if (connection != null) {
java.io.InputStreamReader response = new java.io.InputStreamReader(connection.getInputStream());
javax.json.stream.JsonParser parser=javax.json.Json.createParser(response);
while (parser.hasNext()) {
[parsing inputStream into JsonObject]
}
public String print()throws IOException{
string_json = constructeur_objet.build().toString();
System.out.print(string_json);
//FileWriter file = new FileWriter("serveur/src/main/java/com/gabi/serveur/json/final.json");
//file.write(string_json);
//file.close();
return string_json;
}
}
My problem comes from the last function ProduitApi.print() , it is supposed to return the parsed json in string form so I can send it via the sendText() as well as printing the result into my console so I can see if everything went right. As you can see there are somme commented lines; The FileWriter object that I had created was used with the purpose of writing said string to a file in my pc and let me check inside.
HOWEVER
and here is what I don't understand, If I uncomment those lines so that the print function can also write the file to my drive, The Connection Closes and then Opens again
It can be seen in the console where after printing the json string, it prints OnClose, followed by OnOpen Signaling the connection was reset for some reason.
If I remove the FileWriter section, the connection works normally, the client's connection stays open and he can make another request
End of Console Message after request:
...cuits x22 biscuits fourrés - 304g","qte":"304 g","img":"https://images.openfoodfacts.org/images/products/800/050/031/0427/front_fr.177.400.jpg"}onClose: OnOpen... null...
Finally, my question is just why writing to a file makes my program behave this way (resetting the connection). Does it have anything to do with how streams work?
I accidentally commented the filewriter portion when another Ide said it didn't find the file because I had opened the project from a different directory.
I'm a newbie to Java and Watson Conversation. Is this possible to add images to Watson Conversation response? I want to add an image to Watson Conversation I made a Chatbot on Watson Conversation and integrated it with Facebook as Java web application.I want to add images in Watson response.
public class TestConversation {
public static void main(String[] args) {
BufferedReader br = null;
MessageResponse response = null;
Map context = new HashMap();
try {
br = new BufferedReader(new InputStreamReader(System.in));
String userName = br.readLine();
// Add userName to context to be used by Conversation.
context.put("userName", userName);
while (true) {
String input = br.readLine();
response = conversationAPI(input, context);
System.out.println("Watson Response: " + response.getText().get(0));
context = response.getContext();
System.out.println("———–");
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static MessageResponse conversationAPI(String input, Map context) {
ConversationService service = new ConversationService(ConversationService.VERSION_DATE_2016_07_11);
// Credentials of Workspace of Conversation
service.setUsernameAndPassword("******************", "****************");
MessageRequest newMessage = new MessageRequest.Builder().inputText(input).context(context).build();
// Workspace ID of Conversation current workspace
String workspaceId = "******************";
MessageResponse response = service.message(workspaceId, newMessage).execute();
return response;
}
}
Watson conversation is just text that is sent back. So it is up to your application to render the image.
If you use the conversation simple application, you can use HTML to render. For example, set the output text to the following value.
Here is a picture of a tiger:<br><img src="https://upload.wikimedia.org/wikipedia/commons/0/01/Tiger.25.jpg">
When you display that text in conversation simple it will show the following:
Another option is you can store the image within conversation by saving as base64 format. However you have a limit of 10MB on a conversation file, so it's unlikely to be useful except for small icons.
Example:
Smile: <img src="data:image/png;base64,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">
I am trying to run an Espresso test for my android app, but there is a problem that has been troubling me. In MainActivity, some views' visibility depends on data loaded from net, but in MainActivityTest, I can't manipulate the process of loading data, so I don't know the real data and which view should show and which view should not show. As a result, I don't know how to continue my test. Anyone can tell me how to handle this situation? Thanks!
Try using the MockWebServer library. It lets you mock http responses in your tests, like this:
/**
* Constructor for the test. Set up the mock web server here, so that the base
* URL for the application can be changed before the application loads
*/
public MyActivityTest() {
MockWebServer server = new MockWebServer();
try {
server.start();
} catch (IOException e) {
e.printStackTrace();
}
//Set the base URL for the application
MyApplication.sBaseUrl = server.url("/").toString();
//Create a dispatcher to handle requests to the mock web server
Dispatcher dispatcher = new Dispatcher() {
#Override
public MockResponse dispatch(RecordedRequest recordedRequest) throws InterruptedException {
try {
//When the activity requests the profile data, send it this
if(recordedRequest.getPath().startsWith("/users/self")) {
String fileName = "profile_200.json";
InputStream in = this.getClass().getClassLoader().getResourceAsStream(fileName);
String jsonString = new String(ByteStreams.toByteArray(in));
return new MockResponse().setResponseCode(200).setBody(jsonString);
}
//When the activity requests the image data, send it this
if(recordedRequest.getPath().startsWith("/users/self/media/recent")) {
String fileName = "media_collection_model_test.json";
InputStream in = this.getClass().getClassLoader().getResourceAsStream(fileName);
String jsonString = new String(ByteStreams.toByteArray(in));
return new MockResponse().setResponseCode(200).setBody(jsonString);
}
} catch (IOException e) {
e.printStackTrace();
}
return new MockResponse().setResponseCode(404);
}
};
server.setDispatcher(dispatcher);
}
If possible add some code snippet. I have used Java for coding.
DSS: I would like to add multiple graphical image signature using CoSign Signature Soap API, how can I achieve it? If possible add some code snippet.
Here is a code sample in Java that demonstrates how to add a graphical signature using CoSign Signature SOAP API:
public static void AddGraphicalImage(String username, String domain, String password, byte[] imageBuffer, String imageName) throws Exception {
try {
SignRequest request = new SignRequest();
RequestBaseType.OptionalInputs optInputs = new RequestBaseType.OptionalInputs();
// Set signature type
optInputs.setSignatureType("http://arx.com/SAPIWS/DSS/1.0/set-graphic-image");
// Set user credentials
ClaimedIdentity claimedIdentity = new ClaimedIdentity();
NameIdentifierType nameIdentifier = new NameIdentifierType();
nameIdentifier.setValue(username);
nameIdentifier.setNameQualifier(domain);
CoSignAuthDataType coSignAuthData = new CoSignAuthDataType();
coSignAuthData.setLogonPassword(password);
claimedIdentity.setName(nameIdentifier);
claimedIdentity.setSupportingInfo(coSignAuthData);
optInputs.setClaimedIdentity(claimedIdentity);
// Set graphical image data
GraphicImageType graphicImage = new GraphicImageType();
graphicImage.setGraphicImage(imageBuffer);
graphicImage.setDataFormat(Long.valueOf(6)); //JPG
graphicImage.setGraphicImageName(imageName);
optInputs.setGraphicImageToSet(graphicImage);
request.setOptionalInputs(optInputs);
// Initiate service client
DSS client = new DSS(new URL("https://prime.cosigntrial.com:8080/sapiws/dss.asmx"));
// Send the request
DssSignResult response = client.getDSSSoap().dssSign(request);
// Check result
String errmsg = "" + response.getResult().getResultMajor();
if (errmsg.compareTo("urn:oasis:names:tc:dss:1.0:resultmajor:Success") == 0) {
System.out.println("Graphical image was added successfully!");
return;
}
else {
throw new Exception(response.getResult().getResultMessage().toString());
}
}
catch (Exception e) {
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
}
}
I'm using Sun WTK to run a midlet that needs to send and optionally receive SMS. WMA console can be used to send and receive messages to the midlet but I'd like to do the same thing using my own application.
I have done some sniffing, and noticed that the messages are sent by UDP from the WMA console to the emulator.
After digging inside the jars in WTK I was able to figure out how to send and receive SMS. I had to include the jars kvem.jar and kenv.zip in the application classpath. Tested under Linux.
public static void main(String[] args) throws IOException, PhoneNumberNotAvailableException, InterruptedException {
System.setProperty("kvem.home", "/home/jassuncao/usr/WTK2.5.2");
WMAClient wmaClient = WMAClientFactory.newWMAClient(null, 4);
wmaClient.connect();
wmaClient.setMessageListener(new MessageListener() {
#Override
public void notifyIncomingMessage(WMAClient wmaclient) {
try {
System.out.println("Message received:"+wmaclient.receive());
} catch (IOException e) {
e.printStackTrace();
}
}
});
System.out.println("This number "+wmaClient.getPhoneNumber());
String[] receivers = wmaClient.getKnownReceivers();
for (String receiver : receivers) {
System.out.println("Sending SMS to "+receiver);
Message msg = new Message("Hello world!!");
msg.setFromAddress("sms://"+wmaClient.getPhoneNumber());
msg.setToAddress("sms://"+receiver);
//It seems the ports must be set AFTER the address to work
msg.setToPort(50000);
msg.setFromPort(50000);
wmaClient.send(msg);
}
System.in.read();
wmaClient.unregisterFromServer();
}